From 2d76ff8cc73f2d9c89ff1de0c1e2870890809339 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:25:54 +0200 Subject: [PATCH 01/78] change: don't use `or` to check for `None` arg --- src/lydata/accessor.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 96f9dc6..2c2ccac 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -836,13 +836,18 @@ def infer_sublevels( 2 False False None None False False 3 None None None None None None """ - modalities = modalities or list(get_default_modalities().keys()) - sides = sides or ["ipsi", "contra"] - subdivisions = subdivisions or { - "I": ["a", "b"], - "II": ["a", "b"], - "V": ["a", "b"], - } + if modalities is None: + modalities = list(get_default_modalities().keys()) + + if sides is None: + sides = ["ipsi", "contra"] + + if subdivisions is None: + subdivisions = { + "I": ["a", "b"], + "II": ["a", "b"], + "V": ["a", "b"], + } result = self._obj.copy().drop(self._obj.columns, axis=1) @@ -897,13 +902,18 @@ def infer_superlevels( 3 None None 4 None None """ - modalities = modalities or list(get_default_modalities().keys()) - sides = sides or ["ipsi", "contra"] - subdivisions = subdivisions or { - "I": ["a", "b"], - "II": ["a", "b"], - "V": ["a", "b"], - } + if modalities is None: + modalities = list(get_default_modalities().keys()) + + if sides is None: + sides = ["ipsi", "contra"] + + if subdivisions is None: + subdivisions = { + "I": ["a", "b"], + "II": ["a", "b"], + "V": ["a", "b"], + } result = self._obj.copy().drop(self._obj.columns, axis=1) From 2518817aed5f7769490cb4d19568ec4d1992b696 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:00:11 +0200 Subject: [PATCH 02/78] remove!: old funcs to infer/combine data --- src/lydata/utils.py | 68 --------------------------------------------- 1 file changed, 68 deletions(-) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index 487af71..a28c093 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -242,71 +242,3 @@ def get_default_modalities() -> dict[str, ModalityConfig]: "pathology": ModalityConfig(spec=1.0, sens=1.0, kind="pathological"), "pCT": ModalityConfig(spec=0.86, sens=0.81), } - - -def infer_all_levels( - dataset: pd.DataFrame, - infer_superlevels_kwargs: dict[str, Any] | None = None, - infer_sublevels_kwargs: dict[str, Any] | None = None, -) -> pd.DataFrame: - """Infer all levels of involvement for each diagnostic modality. - - This function first infers sublevel (e.g. 'IIa', and 'IIb') involvement for each - modality using :py:meth:`~lydata.accessor.LyDataAccessor.infer_sublevels`. Then, - it infers superlevel (e.g. 'II') involvement for each modality using - :py:meth:`~lydata.accessor.LyDataAccessor.infer_superlevels`. - """ - infer_sublevels_kwargs = infer_sublevels_kwargs or {} - infer_superlevels_kwargs = infer_superlevels_kwargs or {} - - result = dataset.copy() - - result = update_and_expand( - left=result, - right=result.ly.infer_superlevels(**infer_superlevels_kwargs), - ) - return update_and_expand( - left=result, - right=result.ly.infer_sublevels(**infer_sublevels_kwargs), - ) - - -def infer_and_combine_levels( - dataset: pd.DataFrame, - infer_superlevels_kwargs: dict[str, Any] | None = None, - infer_sublevels_kwargs: dict[str, Any] | None = None, - combine_kwargs: dict[str, Any] | None = None, -) -> pd.DataFrame: - """Enhance the dataset by inferring additional columns from the data. - - This performs the following steps in order: - - 1. Infer the superlevel involvement for each diagnostic modality using the - :py:meth:`~lydata.accessor.LyDataAccessor.infer_superlevels` method. - 2. Infer the sublevel involvement for each diagnostic modality using the - :py:meth:`~lydata.accessor.LyDataAccessor.infer_sublevels` method. This skips - all LNLs that were computed in the previous step. - 3. Compute the maximum likelihood estimate of the true state of the patient using - the :py:meth:`~lydata.accessor.LyDataAccessor.combine`. - - .. important:: - - Performing these operations in any other order may lead to the loss of some - information or even to conflicting LNL involvement information. - - The result contains all LNLs of interest in the head and neck region, as well as - the best estimate of the true state of the patient under the top-level key - ``max_llh``. - """ - result = infer_all_levels( - dataset, - infer_superlevels_kwargs=infer_superlevels_kwargs, - infer_sublevels_kwargs=infer_sublevels_kwargs, - ) - combine_kwargs = combine_kwargs or {} - method = combine_kwargs.get("method", "max_llh") - max_llh = pd.concat( - {method: result.ly.combine(**combine_kwargs)}, - axis="columns", - ) - return result.join(max_llh) From f23b07f1e5e20891d186261890bb2f451fb3083a Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:01:09 +0200 Subject: [PATCH 03/78] fix!: combine mods & lvl info using probs Fixes: #7 --- pyproject.toml | 6 + src/lydata/accessor.py | 235 +++++----------------------------- src/lydata/augmentor.py | 272 ++++++++++++++++++++++++++++++++++++++++ uv.lock | 11 ++ 4 files changed, 320 insertions(+), 204 deletions(-) create mode 100644 src/lydata/augmentor.py diff --git a/pyproject.toml b/pyproject.toml index 3411515..e79e7ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ dependencies = [ "pandera", "pydantic", "loguru", + "roman", ] [project.urls] @@ -67,6 +68,11 @@ exclude = ["docs"] select = ["E", "F", "W", "B", "C", "R", "U", "D", "I", "S", "T", "A", "N"] ignore = ["B028", "N816", "E712"] +[tool.ruff.lint.per-file-ignores] +"tests/*" = [ + "S101", +] + [tool.uv] package = true diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index c2e28e3..46c1a08 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -36,13 +36,12 @@ import warnings from collections.abc import Callable from dataclasses import dataclass -from itertools import product from typing import Any, Literal -import numpy as np import pandas as pd import pandas.api.extensions as pd_ext +from lydata.augmentor import combine_and_augment_levels from lydata.utils import ( ModalityConfig, get_default_column_map_new, @@ -485,62 +484,6 @@ def align_diagnoses( return diagnosis_stack -def _stack_to_float_matrix(diagnosis_stack: list[pd.DataFrame]) -> np.ndarray: - """Convert diagnosis stack to 3D array of floats with ``Nones`` as ``np.nan``.""" - diagnosis_matrix = np.array(diagnosis_stack) - diagnosis_matrix[pd.isna(diagnosis_matrix)] = np.nan - return np.astype(diagnosis_matrix, float) - - -def _evaluate_likelihood_ratios( - diagnosis_matrix: np.ndarray, - sensitivities: np.ndarray, - specificities: np.ndarray, - method: Literal["max_llh", "rank"], -) -> np.ndarray: - """Compare the likelihoods of true/false diagnoses using the given ``method``. - - The ``diagnosis_matrix`` is a 3D array of shape ``(n_modalities, n_patients, - n_levels)``. The ``sensitivities`` and ``specificities`` are 1D arrays of shape - ``(n_modalities,)``. When choosing the ``method="max_llh"``, the likelihood of each - diagnosis is combined into one likelihood for each patient and level. With - ``method="rank"``, the most trustworthy diagnosis is chosen for each patient and - level. - """ - true_pos = sensitivities[:, None, None] * diagnosis_matrix - false_neg = (1 - sensitivities[:, None, None]) * (1 - diagnosis_matrix) - true_neg = specificities[:, None, None] * (1 - diagnosis_matrix) - false_pos = (1 - specificities[:, None, None]) * diagnosis_matrix - - if method not in {"max_llh", "rank"}: - raise ValueError(f"Unknown method {method}") - - agg_func = np.nanprod if method == "max_llh" else np.nanmax - true_llh = agg_func(true_pos + false_neg, axis=0) - false_llh = agg_func(true_neg + false_pos, axis=0) - - return true_llh >= false_llh - - -def _expand_mapping( - short_map: dict[str, Any], - colname_map: dict[str | tuple[str, str, str], Any] | None = None, -) -> dict[tuple[str, str, str], Any]: - """Expand the column map to full column names. - - >>> _expand_mapping({'age': 'foo', 'hpv': 'bar'}) - {('patient', '#', 'age'): 'foo', ('patient', '#', 'hpv_status'): 'bar'} - """ - _colname_map = colname_map or get_default_column_map_old().from_short - expanded_map = {} - - for colname, func in short_map.items(): - expanded_colname = getattr(_colname_map.get(colname), "long", colname) - expanded_map[expanded_colname] = func - - return expanded_map - - AggFuncType = dict[str | tuple[str, str, str], Callable[[pd.Series], pd.Series]] @@ -765,12 +708,14 @@ def stats( return stats - def _filter_and_sort_modalities( + def _filter_modalities( self, modalities: dict[str, ModalityConfig] | None = None, ) -> dict[str, ModalityConfig]: - """Return only those ``modalities`` present in data and sorted as in data.""" - modalities = modalities or get_default_modalities() + """Return only those ``modalities`` present in data.""" + if modalities is None: + modalities = get_default_modalities() + return { modality_name: modality_config for modality_name, modality_config in modalities.items() @@ -808,50 +753,22 @@ def combine( 3 False 4 None """ - modalities = self._filter_and_sort_modalities(modalities) - - diagnosis_stack = align_diagnoses(self._obj, list(modalities.keys())) - diagnosis_matrix = _stack_to_float_matrix(diagnosis_stack) - all_nan_mask = np.all(np.isnan(diagnosis_matrix), axis=0) + modalities = self._filter_modalities(modalities) - result = _evaluate_likelihood_ratios( - diagnosis_matrix=diagnosis_matrix, - sensitivities=np.array([mod.sens for mod in modalities.values()]), - specificities=np.array([mod.spec for mod in modalities.values()]), + return combine_and_augment_levels( + diagnoses=[self._obj[mod] for mod in modalities.keys()], + specificities=[mod.spec for mod in modalities.values()], + sensitivities=[mod.sens for mod in modalities.values()], method=method, + subdivisions={}, ) - result = np.astype(result, object) - result[all_nan_mask] = None - return pd.DataFrame(result, columns=diagnosis_stack[0].columns) - def infer_sublevels( + def augment( self, - modalities: list[str] | None = None, - sides: list[Literal["ipsi", "contra"]] | None = None, + modality: str = "max_llh", subdivisions: dict[str, list[str]] | None = None, ) -> pd.DataFrame: - """Determine involvement status of an LNL's sublevels (e.g., IIa and IIb). - - Some LNLs have sublevels, e.g., IIa and IIb. The involvement of these sublevels - is not always reported, but only the superlevel's status. This function infers - the status of the sublevels from the superlevel. - - The sublevel's status is computed for the specified ``modalities``. If and what - sublevels a superlevel has, is specified in ``subdivisions``. The default - ``subdivisions`` argument looks like this: - - .. code-block:: python - - { - "I": ["a", "b"], - "II": ["a", "b"], - "V": ["a", "b"], - } - - The resulting DataFrame will only contain the newly inferred sublevel columns - and only for those sublevels that were not already present in the DataFrame. - Thus, one can simply :py:meth:`~pandas.DataFrame.join` the original DataFrame - with the result. + """Complete the sub- and superlevel involvement columns. >>> df = pd.DataFrame({ ... ('MRI', 'ipsi' , 'I' ): [True , False, False, None], @@ -860,110 +777,20 @@ def infer_sublevels( ... ('MRI', 'ipsi' , 'IV'): [False, False, True , None], ... ('CT' , 'ipsi' , 'I' ): [True , False, False, None], ... }) - >>> df.ly.infer_sublevels(modalities=["MRI"]) # doctest: +NORMALIZE_WHITESPACE - MRI - ipsi contra - Ia Ib IIa IIb Ia Ib - 0 None None False False False False - 1 False False False False None None - 2 False False None None False False - 3 None None None None None None - """ - if modalities is None: - modalities = list(get_default_modalities().keys()) - - if sides is None: - sides = ["ipsi", "contra"] - - if subdivisions is None: - subdivisions = { - "I": ["a", "b"], - "II": ["a", "b"], - "V": ["a", "b"], - } - - result = self._obj.copy().drop(self._obj.columns, axis=1) - - loop_combinations = product(modalities, sides, subdivisions.items()) - for modality, side, (superlevel, subids) in loop_combinations: - try: - is_healthy = self._obj[modality, side, superlevel] == False # noqa - except KeyError: - continue - - for subid in subids: - sublevel = superlevel + subid - result.loc[is_healthy, (modality, side, sublevel)] = False - result.loc[~is_healthy, (modality, side, sublevel)] = None - - return result - - def infer_superlevels( - self, - modalities: list[str] | None = None, - sides: list[Literal["ipsi", "contra"]] | None = None, - subdivisions: dict[str, list[str]] | None = None, - ) -> pd.DataFrame: - """Determine involvement status of an LNL's superlevel (e.g., II). - - Some LNLs have sublevels, e.g., IIa and IIb. In real data, sometimes the - sublevels are reported, sometimes only the superlevel. This function infers the - status of the superlevel from the sublevels. - - The superlevel's status is computed for the specified ``modalities``. If and - what sublevels a superlevel has, is specified in ``subdivisions``. - - The resulting DataFrame will only contain the newly inferred superlevel columns - and only for those superlevels that were not already present in the DataFrame. - This way, it is straightforward to :py:meth:`~pandas.DataFrame.join` it with the - original DataFrame. - - >>> df = pd.DataFrame({ - ... ('MRI', 'ipsi' , 'Ia' ): [True , False, False, None, None ], - ... ('MRI', 'ipsi' , 'Ib' ): [False, True , False, None, False], - ... ('MRI', 'contra', 'IIa'): [False, False, None , None, None ], - ... ('MRI', 'contra', 'IIb'): [False, True , True , None, False], - ... ('CT' , 'ipsi' , 'I' ): [True , False, False, None, None ], - ... }) - >>> df.ly.infer_superlevels(modalities=["MRI"]) # doctest: +NORMALIZE_WHITESPACE - MRI - ipsi contra - I II - 0 True False - 1 True True - 2 False True - 3 None None - 4 None None + >>> df.ly.augment(modality="MRI") # doctest: +NORMALIZE_WHITESPACE + contra ipsi + I Ia Ib I Ia Ib II IIa IIb IV + 0 False False False True None None False False False False + 1 True None None False False False False False False False + 2 False False False False False False True None None True + 3 None None None None None None None None None None """ - if modalities is None: - modalities = list(get_default_modalities().keys()) - - if sides is None: - sides = ["ipsi", "contra"] - - if subdivisions is None: - subdivisions = { - "I": ["a", "b"], - "II": ["a", "b"], - "V": ["a", "b"], - } - - result = self._obj.copy().drop(self._obj.columns, axis=1) - - loop_combinations = product(modalities, sides, subdivisions.items()) - for modality, side, (superlevel, subids) in loop_combinations: - sublevels = [superlevel + subid for subid in subids] - sublevel_cols = [(modality, side, sublevel) for sublevel in sublevels] - - try: - is_unknown = self._obj[sublevel_cols].isna().any(axis=1) - is_any_involved = self._obj[sublevel_cols].any(axis=1) - are_all_healthy = ~is_unknown & ~is_any_involved - except KeyError: - continue - - result.loc[are_all_healthy, (modality, side, superlevel)] = False - result.loc[is_unknown, (modality, side, superlevel)] = None - result.loc[is_any_involved, (modality, side, superlevel)] = True - - return result + if modality not in self.get_modalities(): + raise ValueError(f"Modality {modality!r} not found in DataFrame.") + + return combine_and_augment_levels( + diagnoses=[self._obj[modality]], + specificities=[1.0], # Numbers here don't matter, as we only "combine" + sensitivities=[1.0], # a single modality's involvement info. + subdivisions=subdivisions, + ) diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py new file mode 100644 index 0000000..809ba21 --- /dev/null +++ b/src/lydata/augmentor.py @@ -0,0 +1,272 @@ +"""Provides functions for augmenting and enhancing the lyDATA tables.""" + +import re +from collections.abc import Mapping, Sequence +from itertools import product +from typing import Literal + +import numpy as np +import pandas as pd +from roman import fromRoman as roman_to_int # noqa: N813 + + +def _keep_only_involvement(table: pd.DataFrame) -> pd.DataFrame: + """Keep only the involvement information under ``"ipsi"`` and ``"contra"``. + + >>> table = pd.DataFrame({ + ... ("ipsi", "I"): [True, False, None], + ... ("contra", "II"): [False, True, None], + ... ("foo", "bar"): [1, 2, 3], + ... }) + >>> _keep_only_involvement(table) + ipsi contra + I II + 0 True False + 1 False True + 2 None None + """ + return table.filter(regex=r"(ipsi|contra)", axis="columns") + + +def _align_tables(tables: Sequence[pd.DataFrame]) -> list[pd.DataFrame]: + """Align all columns in the sequence of ``tables``. + + >>> one = pd.DataFrame({"a": [1, 2], "b": [3, 4]}) + >>> two = pd.DataFrame({"c": [5, 6], "a": [7, 8]}) + >>> aligned = _align_tables([one, two]) + >>> aligned[0] + a b c + 0 1 3 NaN + 1 2 4 NaN + >>> aligned[1] + a b c + 0 7 NaN 5 + 1 8 NaN 6 + """ + if len(tables) == 0: + return [] + + aligned_tables = [] + this = None + + for table in tables: + if this is None: + this = table.copy() + continue + + this, other = this.align(table, join="outer") + aligned_tables.append(other) + + return [this] + aligned_tables + + +def _convert_to_float_matrix(diagnoses: Sequence[pd.DataFrame]) -> np.ndarray: + """Convert a sequence of ``diagnoses`` to a 3D float matrix. + + >>> one = pd.DataFrame({"a": [1, None], "b": [3, 4]}) + >>> two = pd.DataFrame({"a": [5, 6], "b": [7, None]}) + >>> _convert_to_float_matrix([one, two]) # doctest: +NORMALIZE_WHITESPACE + array([[[ 1., 3.], + [nan, 4.]], + [[ 5., 7.], + [ 6., nan]]]) + """ + matrix = np.array(diagnoses) + matrix[pd.isna(matrix)] = np.nan + return np.astype(matrix, float) + + +def _get_numeral_with_sub_value(key: str) -> float: + """Get the value of a Roman numeral with an optional sublevel. + + >>> _get_numeral_with_sub_value("I") + 1.0 + >>> _get_numeral_with_sub_value("IIa") + 2.01 + >>> _get_numeral_with_sub_value("IXb") + 9.02 + """ + numeral, sublvl = re.match(r"([IVXLCDM]+)([a-z]?)", key).groups() + + base = roman_to_int(numeral) + addition = 0.0 + + if len(sublvl) == 1: + addition = "abcdefghijklmnopqrstuvwxyz".index(sublvl) / 100.0 + 0.01 + + return base + addition + + +def _compute_likelihoods( + diagnosis_matrix: np.ndarray, + sensitivities: np.ndarray, + specificities: np.ndarray, + method: Literal["max_llh", "rank"], +) -> tuple[np.ndarray, np.ndarray]: + """Compute the likelihoods of true/false diagnoses using the given ``method``. + + The ``diagnosis_matrix`` is a 3D array of shape ``(n_modalities, n_patients, + n_levels)``. It should contain ``1.0`` where the diagnosis was positive and ``0.0`` + where it was negative. It may also contain ``np.nan``. + + The ``sensitivities`` and ``specificities`` are 1D arrays of shape + ``(n_modalities,)``. When choosing the ``method="max_llh"``, the likelihood of each + diagnosis is combined into one likelihood for each patient and level. With + ``method="rank"``, the likelihoods are computed for the most trustworthy diagnosis. + + Returns the likelihoods of true and false diagnoses as two separate arrays. + """ + true_pos = sensitivities[:, None, None] * diagnosis_matrix + false_neg = (1 - sensitivities[:, None, None]) * (1 - diagnosis_matrix) + true_neg = specificities[:, None, None] * (1 - diagnosis_matrix) + false_pos = (1 - specificities[:, None, None]) * diagnosis_matrix + + if method not in {"max_llh", "rank"}: + raise ValueError(f"Unknown method {method}") + + agg_func = np.nanprod if method == "max_llh" else np.nanmax + true_llh = agg_func(true_pos + false_neg, axis=0) + false_llh = agg_func(true_neg + false_pos, axis=0) + return true_llh, false_llh + + +def _compute_involved_probs( + diagnosis_matrix: np.ndarray, + sensitivities: np.ndarray, + specificities: np.ndarray, + method: Literal["max_llh", "rank"], +) -> np.ndarray: + """Compute the probabilities of involvement for each diagnosis.""" + true_llhs, false_llhs = _compute_likelihoods( + diagnosis_matrix=diagnosis_matrix, + sensitivities=sensitivities, + specificities=specificities, + method=method, + ) + return true_llhs / (true_llhs + false_llhs) + + +def combine_and_augment_levels( + diagnoses: Sequence[pd.DataFrame], + specificities: Sequence[float], + sensitivities: Sequence[float], + method: Literal["max_llh", "rank"] = "max_llh", + sides: Sequence[Literal["ipsi", "contra"]] | None = None, + subdivisions: Mapping[str, Sequence[str]] | None = None, +) -> pd.DataFrame: + """Combine ``diagnoses`` and add sub-/superlevel involvement info.""" + diagnoses = [_keep_only_involvement(table) for table in diagnoses] + diagnoses = _align_tables(diagnoses) + matrix = _convert_to_float_matrix(diagnoses) + all_nan_mask = np.all(np.isnan(matrix), axis=0) + + involved_probs = _compute_involved_probs( + diagnosis_matrix=matrix, + sensitivities=np.array(sensitivities), + specificities=np.array(specificities), + method=method, + ) + + combined = np.astype(involved_probs >= 0.5, object) + combined[all_nan_mask] = None + combined = pd.DataFrame(combined, columns=diagnoses[0].columns) + + healthy_probs = 1.0 - involved_probs + involved_probs[all_nan_mask] = np.nan + involved_probs = pd.DataFrame(involved_probs, columns=diagnoses[0].columns) + healthy_probs[all_nan_mask] = np.nan + healthy_probs = pd.DataFrame(healthy_probs, columns=diagnoses[0].columns) + + if sides is None: + sides = ["ipsi", "contra"] + + if subdivisions is None: + subdivisions = { + "I": ["a", "b"], + "II": ["a", "b"], + "V": ["a", "b"], + } + + for side, (superlvl, subids) in product(sides, subdivisions.items()): + if side not in combined.columns: + continue + + superlvl_col = (side, superlvl) + sublvls = [superlvl + subid for subid in subids] + sublvl_cols = [(side, sublvl) for sublvl in sublvls] + + if set([superlvl] + sublvls).isdisjoint(set(combined[side].columns)): + continue + + for lvl in [superlvl] + sublvls: + combined[(side, lvl)] = combined.get((side, lvl), [None] * len(combined)) + nans = [np.nan] * len(combined) + involved_probs[(side, lvl)] = involved_probs.get((side, lvl), nans) + healthy_probs[(side, lvl)] = healthy_probs.get((side, lvl), nans) + + is_super_unknown = combined[superlvl_col].isna() + is_super_healthy = combined[superlvl_col] == False + is_super_involved = combined[superlvl_col] == True + + is_any_sub_involved = combined[sublvl_cols].any(axis=1) + is_one_sub_unknown = combined[sublvl_cols].isna().sum(axis=1) == 1 + are_all_subs_healthy = (combined[sublvl_cols] == False).all(axis=1) + + # Superlvl unknown => no conflict, use sublvl info + combined.loc[is_super_unknown & is_any_sub_involved, superlvl_col] = True + combined.loc[is_super_unknown & are_all_subs_healthy, superlvl_col] = False + + # Sublevels unknown => no conflict, use superlvl info + combined.loc[~is_any_sub_involved & is_super_healthy, sublvl_cols] = False + + # Conflicts + # 1) Subs override superlvl + super_healthy_prob_from_subs = np.nanprod(healthy_probs[sublvl_cols], axis=1) + super_involved_prob_from_subs = 1.0 - super_healthy_prob_from_subs + + do_subs_determine_super_healthy = is_super_involved & ( + super_healthy_prob_from_subs > involved_probs[superlvl_col] + ) + combined.loc[do_subs_determine_super_healthy, superlvl_col] = False + + do_subs_determine_super_involved = is_super_healthy & ( + super_involved_prob_from_subs > healthy_probs[superlvl_col] + ) + combined.loc[do_subs_determine_super_involved, superlvl_col] = True + + # 2) Superlvl overrides subs + does_super_determine_all_subs_healthy = ( + is_any_sub_involved + & is_super_healthy + & (healthy_probs[superlvl_col] > super_involved_prob_from_subs) + ) + combined.loc[does_super_determine_all_subs_healthy, sublvl_cols] = False + + does_super_determine_subs_unknown = ( + are_all_subs_healthy + & is_super_involved + & (involved_probs[superlvl_col] > super_healthy_prob_from_subs) + ) + combined.loc[does_super_determine_subs_unknown, sublvl_cols] = None + + for sublvl in sublvls: + sublvl_col = (side, sublvl) + is_sub_unknown = combined[sublvl_col].isna() + does_super_determine_unknown_sub_involved = ( + is_super_involved # This combination of conditions means that the + & is_sub_unknown # current `sublvl` is unknown, while all others + & is_one_sub_unknown # are healthy, while the superlvl is involved. + & ~is_any_sub_involved # Then, we change the sublvl to involved. + & (involved_probs[superlvl_col] > super_healthy_prob_from_subs) + ) + combined.loc[does_super_determine_unknown_sub_involved, sublvl_col] = True + + # combined = combined[sorted(combined.columns.get_level_values(0))] + + combined = combined.sort_index( + axis="columns", + level=1, + sort_remaining=False, + key=lambda idx: [_get_numeral_with_sub_value(str(x)) for x in idx], + ) + return combined.sort_index(axis="columns", level=0, sort_remaining=False) diff --git a/uv.lock b/uv.lock index 310505d..043f445 100644 --- a/uv.lock +++ b/uv.lock @@ -473,6 +473,7 @@ dependencies = [ { name = "pandera" }, { name = "pydantic" }, { name = "pygithub" }, + { name = "roman" }, ] [package.optional-dependencies] @@ -507,6 +508,7 @@ requires-dist = [ { name = "pygithub" }, { name = "pytest", marker = "extra == 'tests'" }, { name = "pytest-cov", marker = "extra == 'tests'" }, + { name = "roman" }, { name = "sphinx", marker = "extra == 'docs'" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, { name = "sphinx-book-theme", marker = "extra == 'docs'" }, @@ -1192,6 +1194,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, ] +[[package]] +name = "roman" +version = "5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/86/8bdb59db4b7ea9a2bd93f8d25298981e09a4c9f4744cf4cbafa7ef6fee7b/roman-5.1.tar.gz", hash = "sha256:3a86572e9bc9183e771769601189e5fa32f1620ffeceebb9eca836affb409986", size = 8066 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/d0/27c9840ddaf331ace898c7f4aa1e1304a7acc22b844b5420fabb6d14c3a0/roman-5.1-py3-none-any.whl", hash = "sha256:bf595d8a9bc4a8e8b1dfa23e1d4def0251b03b494786df6b8c3d3f1635ce285a", size = 5825 }, +] + [[package]] name = "roman-numerals-py" version = "3.1.0" From 11c6161140373eb1079cb9997bcfcf039d479020 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:01:43 +0200 Subject: [PATCH 04/78] test: test new combine/augment with CLB patient 17 Related: #7 --- tests/test_infer_levels.py | 55 +++++++++++++++----------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/tests/test_infer_levels.py b/tests/test_infer_levels.py index 80e38c5..426486d 100644 --- a/tests/test_infer_levels.py +++ b/tests/test_infer_levels.py @@ -1,36 +1,25 @@ """Check that inferring sub- and super-levels works correctly.""" -import pandas as pd -import pytest - import lydata # noqa: F401 - - -@pytest.fixture -def mock_data() -> pd.DataFrame: - """Create a mock dataset for testing.""" - return pd.DataFrame({ - ("MRI", "ipsi", "Ia" ): [True , False, False, None, None ], - ("MRI", "ipsi", "Ib" ): [False, True , False, None, False], - ("MRI", "contra", "IIa"): [False, False, None , None, None ], - ("MRI", "contra", "IIb"): [False, True , True , None, False], - ("CT", "ipsi", "I" ): [True , False, False, None, None ], - }) - - -def test_infer_superlevels(mock_data: pd.DataFrame) -> None: - """Check that superlevels are inferred correctly.""" - inferred = mock_data.ly.infer_superlevels(modalities=["MRI"]) - - expected_ipsi_I = [True, True, False, None, None] - expected_contra_II = [False, True, True, None, None] - - for example in range(len(mock_data)): - assert ( - inferred.iloc[example].MRI.ipsi.I - == expected_ipsi_I[example] - ), f"{example = } mismatch for ipsi I" - assert ( - inferred.iloc[example].MRI.contra.II - == expected_contra_II[example] - ), f"{example = } mismatch for contra II" +from lydata.augmentor import combine_and_augment_levels +from lydata.utils import get_default_modalities + + +def test_augment_levels() -> None: + """Check the advanced combination and augmentation of diagnoses and levels.""" + clb_raw = next(lydata.load_datasets(institution="clb", subsite="oropharynx")) + modalities = get_default_modalities() + modalities = { + name: mod + for name, mod in modalities.items() + if name in clb_raw.columns.get_level_values(0) + } + clb_aug = combine_and_augment_levels( + diagnoses=[clb_raw[mod] for mod in modalities.keys()], + specificities=[mod.spec for mod in modalities.values()], + sensitivities=[mod.sens for mod in modalities.values()], + ) + assert len(clb_aug) == len(clb_raw), "Augmented data length mismatch" + assert clb_aug.iloc[16].ipsi.I == False + assert clb_aug.iloc[16].ipsi.Ia == False + assert clb_aug.iloc[16].ipsi.Ib == False From 7412c0601766267b9ac062bddf4ca6d4a849338a Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 24 Jul 2025 12:21:55 +0200 Subject: [PATCH 05/78] feat: `pass_to` to `C` objects for custom queries --- src/lydata/querier.py | 389 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 src/lydata/querier.py diff --git a/src/lydata/querier.py b/src/lydata/querier.py new file mode 100644 index 0000000..6ae4128 --- /dev/null +++ b/src/lydata/querier.py @@ -0,0 +1,389 @@ +"""Querier module for lydata package. + +This module provides the :py:class:`Q` and :py:class:`C` classes for creating and +combining reusable queries to filter :py:class:`pandas.DataFrame` objects. These +classes are inspired by Django's ``Q`` objects and allow for a more readable and modular +way to filter and query data. + +For example, we may want to keep only patient with tumors of T-category 3 or higher. +Then, we can write + +.. code-block:: python + + from lydata import C + has_t_stage = C("t_stage") >= 3 + +Now, through the equality comparison of an instance of :py:class:`C`, the +``has_t_stage`` is an instance of :py:class:`Q` that can be combined with other queries +and applied via our custom :py:class:`~lydata.accessor.LyDataAccessor` to a table: + +.. code-block:: python + + is_old = C("age") >= 65 + data.ly.query(has_t_stage & is_old) + +Internally, this works by calling the :py:meth:`Q.execute` method, which returns a +boolean mask to filter the DataFrame. So, the above example is equivalent to + +.. code-block:: python + + (has_t_stage & is_old).execute(data) +""" + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any, Literal + +import pandas as pd + +from lydata import accessor # noqa: F401 +from lydata.types import CanExecute +from lydata.utils import _get_all_true + + +class CombineQMixin: + """Mixin class for combining queries. + + Four operators are defined for combining queries: + + 1. ``&`` for logical AND operations. + The returned object is an :py:class:`AndQ` instance and - when executed - + returns a boolean mask where both queries are satisfied. When the right-hand + side is ``None``, the left-hand side query object is returned unchanged. + 2. ``|`` for logical OR operations. + The returned object is an :py:class:`OrQ` instance and - when executed - + returns a boolean mask where either query is satisfied. When the right-hand + side is ``None``, the left-hand side query object is returned unchanged. + 3. ``~`` for inverting a query. + The returned object is a :py:class:`NotQ` instance and - when executed - + returns a boolean mask where the query is not satisfied. + 4. ``==`` for checking if two queries are equal. + Two queries are equal if their column names, operators, and values are equal. + Note that this does not check if the queries are semantically equal, i.e., if + they would return the same result when executed. + """ + + def __and__(self, other: CanExecute | None) -> AndQ: + """Combine two queries with a logical AND.""" + return self if other is None else AndQ(self, other) + + def __or__(self, other: CanExecute | None) -> OrQ: + """Combine two queries with a logical OR.""" + return self if other is None else OrQ(self, other) + + def __invert__(self) -> NotQ: + """Negate the query.""" + return NotQ(self) + + def __eq__(self, value): + """Check if two queries are equal.""" + return ( + isinstance(value, self.__class__) + and self.colname == value.colname + and self.operator == value.operator + and self.value == value.value + ) + + +class Q(CombineQMixin): + """Combinable query object for filtering a DataFrame. + + The syntax for this object is similar to Django's ``Q`` object. It can be used to + define queries in a more readable and modular way. + + .. caution:: + + The column names are not checked upon instantiation. This is only done when the + query is executed. In fact, the :py:class:`Q` object does not even know about + the :py:class:`~pandas.DataFrame` it will be applied to in the beginning. On the + flip side, this means a query may be reused for different DataFrames. + + The ``operator`` argument may be one of the following: + + - ``'=='``: Checks if ``column`` values are equal to the ``value``. + - ``'<'``: Checks if ``column`` values are less than the ``value``. + - ``'<='``: Checks if ``column`` values are less than or equal to ``value``. + - ``'>'``: Checks if ``column`` values are greater than the ``value``. + - ``'>='``: Checks if ``column`` values are greater than or equal to ``value``. + - ``'!='``: Checks if ``column`` values are not equal to the ``value``. This is + equivalent to ``~Q(column, '==', value)``. + - ``'in'``: Checks if ``column`` values are in the list of ``value``. For this, + pandas' :py:meth:`~pandas.Series.isin` method is used. + - ``'contains'``: Checks if ``column`` values contain the string ``value``. + Here, pandas' :py:meth:`~pandas.Series.str.contains` method is used. + - ``'pass_to'``: Passes the column values to the callable ``value``. This is useful + for custom filtering functions that may not be covered by the other operators. + """ + + _OPERATOR_MAP: dict[str, Callable[[pd.Series, Any], pd.Series]] = { + "==": lambda series, value: series == value, + "<": lambda series, value: series < value, + "<=": lambda series, value: series <= value, + ">": lambda series, value: series > value, + ">=": lambda series, value: series >= value, + "!=": lambda series, value: series != value, # same as ~Q("col", "==", value) + "in": lambda series, value: series.isin(value), # value is a list + "contains": lambda series, value: series.str.contains(value), # value is a str + "pass_to": lambda series, value: value(series), # value is a callable + } + + def __init__( + self, + column: str, + operator: Literal["==", "<", "<=", ">", ">=", "!=", "in", "contains"], + value: Any, + ) -> None: + """Create query object that can compare a ``column`` with a ``value``.""" + self.colname = column + self.operator = operator + self.value = value + + def __repr__(self) -> str: + """Return a string representation of the query.""" + return f"Q({self.colname!r}, {self.operator!r}, {self.value!r})" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Return a boolean mask where the query is satisfied for ``df``. + + >>> df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['foo', 'bar', 'baz']}) + >>> Q('col1', '<=', 2).execute(df) + 0 True + 1 True + 2 False + Name: col1, dtype: bool + >>> Q('col2', 'contains', 'ba').execute(df) + 0 False + 1 True + 2 True + Name: col2, dtype: bool + >>> Q('col1', 'pass_to', lambda x: x % 2 == 0).execute(df) + 0 False + 1 True + 2 False + Name: col1, dtype: bool + """ + column = df.ly[self.colname] + return self._OPERATOR_MAP[self.operator](column, self.value) + + +class NoneQ(CombineQMixin): + """Query object that always returns the entire DataFrame. Useful as default.""" + + def __repr__(self) -> str: + """Return a string representation of the query.""" + return "NoneQ()" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Return a boolean mask with all entries set to ``True``.""" + return _get_all_true(df) + + +class AndQ(CombineQMixin): + """Query object for combining two queries with a logical AND. + + >>> df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['foo', 'bar', 'baz']}) + >>> q1 = Q('col1', '!=', 3) + >>> q2 = Q('col2', 'contains', 'ba') + >>> and_q = q1 & q2 + >>> print(and_q) + (Q('col1', '!=', 3) & Q('col2', 'contains', 'ba')) + >>> isinstance(and_q, AndQ) + True + >>> and_q.execute(df) + 0 False + 1 True + 2 False + dtype: bool + >>> all((q1 & None).execute(df) == q1.execute(df)) + True + """ + + def __init__(self, q1: CanExecute, q2: CanExecute) -> None: + """Combine two queries with a logical AND.""" + self.q1 = q1 + self.q2 = q2 + + def __repr__(self) -> str: + """Return a string representation of the query.""" + return f"({self.q1!r} & {self.q2!r})" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Return a boolean mask where both queries are satisfied.""" + return self.q1.execute(df) & self.q2.execute(df) + + +class OrQ(CombineQMixin): + """Query object for combining two queries with a logical OR. + + >>> df = pd.DataFrame({'col1': [1, 2, 3]}) + >>> q1 = Q('col1', '==', 1) + >>> q2 = Q('col1', '==', 3) + >>> or_q = q1 | q2 + >>> print(or_q) + (Q('col1', '==', 1) | Q('col1', '==', 3)) + >>> isinstance(or_q, OrQ) + True + >>> or_q.execute(df) + 0 True + 1 False + 2 True + Name: col1, dtype: bool + >>> all((q1 | None).execute(df) == q1.execute(df)) + True + """ + + def __init__(self, q1: CanExecute, q2: CanExecute) -> None: + """Combine two queries with a logical OR.""" + self.q1 = q1 + self.q2 = q2 + + def __repr__(self) -> str: + """Return a string representation of the query.""" + return f"({self.q1!r} | {self.q2!r})" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Return a boolean mask where either query is satisfied.""" + return self.q1.execute(df) | self.q2.execute(df) + + +class NotQ(CombineQMixin): + """Query object for negating a query. + + >>> df = pd.DataFrame({'col1': [1, 2, 3]}) + >>> q = Q('col1', '==', 2) + >>> not_q = ~q + >>> print(not_q) + ~Q('col1', '==', 2) + >>> isinstance(not_q, NotQ) + True + >>> not_q.execute(df) + 0 True + 1 False + 2 True + Name: col1, dtype: bool + >>> print(~(Q('col1', '==', 2) & Q('col1', '!=', 3))) + ~(Q('col1', '==', 2) & Q('col1', '!=', 3)) + """ + + def __init__(self, q: CanExecute) -> None: + """Negate the given query ``q``.""" + self.q = q + + def __repr__(self) -> str: + """Return a string representation of the query.""" + return f"~{self.q!r}" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Return a boolean mask where the query is not satisfied.""" + return ~self.q.execute(df) + + +class C: + """Wraps a column name and produces a :py:class:`Q` object upon comparison. + + This is basically a shorthand for creating a :py:class:`Q` object that avoids + writing the operator and value in quotes. Thus, it may be more readable and allows + IDEs to provide better autocompletion. + + .. caution:: + + Just like for the :py:class:`Q` object, it is not checked upon instantiation + whether the column name is valid. This is only done when the query is executed. + """ + + def __init__(self, *column: str) -> None: + """Create a column object for comparison. + + For querying multi-level columns, both the syntax ``C('col1', 'col2')`` and + ``C(('col1', 'col2'))`` is valid. + + >>> (C('col1', 'col2') == 1) == (C(('col1', 'col2')) == 1) + True + """ + self.column = column[0] if len(column) == 1 else column + + def __repr__(self) -> str: + """Return a string representation of the column object. + + >>> repr(C('foo')) + "C('foo')" + >>> repr(C('foo', 'bar')) + "C(('foo', 'bar'))" + """ + return f"C({self.column!r})" + + def __eq__(self, value: Any) -> Q: + """Create a query object for comparing equality. + + >>> C('foo') == 'bar' + Q('foo', '==', 'bar') + """ + return Q(self.column, "==", value) + + def __lt__(self, value: Any) -> Q: + """Create a query object for comparing less than. + + >>> C('foo') < 42 + Q('foo', '<', 42) + """ + return Q(self.column, "<", value) + + def __le__(self, value: Any) -> Q: + """Create a query object for comparing less than or equal. + + >>> C('foo') <= 42 + Q('foo', '<=', 42) + """ + return Q(self.column, "<=", value) + + def __gt__(self, value: Any) -> Q: + """Create a query object for comparing greater than. + + >>> C('foo') > 42 + Q('foo', '>', 42) + """ + return Q(self.column, ">", value) + + def __ge__(self, value: Any) -> Q: + """Create a query object for comparing greater than or equal. + + >>> C('foo') >= 42 + Q('foo', '>=', 42) + """ + return Q(self.column, ">=", value) + + def __ne__(self, value: Any) -> Q: + """Create a query object for comparing inequality. + + >>> C('foo') != 'bar' + Q('foo', '!=', 'bar') + """ + return Q(self.column, "!=", value) + + def isin(self, value: list[Any]) -> Q: + """Create a query object for checking if the column values are in a list. + + >>> C('foo').isin([1, 2, 3]) + Q('foo', 'in', [1, 2, 3]) + """ + return Q(self.column, "in", value) + + def contains(self, value: str) -> Q: + """Create a query object for checking if the column values contain a string. + + >>> C('foo').contains('bar') + Q('foo', 'contains', 'bar') + """ + return Q(self.column, "contains", value) + + def pass_to(self, value: Callable[[pd.Series], pd.Series]) -> Q: + """Create a query object that passes the column values to a callable. + + This is useful for custom filtering functions that may not be covered by the + other operators. + + >>> C('foo').pass_to(lambda x: x > 42) # doctest: +ELLIPSIS + Q('foo', 'pass_to', at ...>) + """ + return Q(self.column, "pass_to", value) From d4658b71161ea80f014cf817e2beaa470f9a38c1 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 24 Jul 2025 12:22:36 +0200 Subject: [PATCH 06/78] refac: move `C` & `Q` to own module --- src/lydata/__init__.py | 4 +- src/lydata/accessor.py | 530 +++++++---------------------------------- src/lydata/types.py | 14 ++ src/lydata/utils.py | 5 + 4 files changed, 104 insertions(+), 449 deletions(-) create mode 100644 src/lydata/types.py diff --git a/src/lydata/__init__.py b/src/lydata/__init__.py index 42b433e..55db9d7 100644 --- a/src/lydata/__init__.py +++ b/src/lydata/__init__.py @@ -3,12 +3,11 @@ from loguru import logger import lydata._version as _version -from lydata.accessor import C, Q from lydata.loader import ( available_datasets, load_datasets, ) -from lydata.utils import infer_and_combine_levels +from lydata.querier import C, Q from lydata.validator import validate_datasets __author__ = "Roman Ludwig" @@ -23,7 +22,6 @@ "available_datasets", "load_datasets", "validate_datasets", - "infer_and_combine_levels", ] logger.disable("lydata") diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 46c1a08..2923ee4 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -1,4 +1,4 @@ -"""Module containing a custom accessor and helpers for querying lyDATA. +"""Module containing a custom accessor for interacting with lyDATA tables. Because of the special three-level header of the lyDATA tables, it is sometimes cumbersome and lengthy to access the columns. While this is certainly necessary to @@ -10,25 +10,13 @@ the above mentioned functionality. That way, accessing the age of all patients is now as easy as typing ``df.ly.age``. -Beyond that, the module implements a convenient wat to query the -:py:class:`~pandas.DataFrame`: The :py:class:`Q` object, that was inspired by Django's -``Q`` object. It allows for more readable and modular queries, which can be combined -with logical operators and reused across different DataFrames. - -The :py:class:`Q` objects can be passed to the :py:meth:`LyDataAccessor.query` and -:py:meth:`LyDataAccessor.portion` methods to filter the DataFrame or compute the -:py:class:`QueryPortion` of rows that satisfy the query. Alternatively, any of these -:py:class:`Q` objects have a method called :py:meth:`~Q.execute` that can be called with -a :py:class:`~pandas.DataFrame` to get a boolean mask of the rows satisfying the query. - -Further, we implement methods like :py:meth:`~LyDataAccessor.combine`, -:py:meth:`~LyDataAccessor.infer_sublevels`, and -:py:meth:`~LyDataAccessor.infer_superlevels` to compute additional columns from the -lyDATA tables. This is sometimes necessary, because not all data contains all the -possibly necessary columns. E.g., in some cohorts we do have detailed sublevel -information (i.e., IIa and IIb), while in others only the superlevel (II) is reported. -In such a case, one can now simply call ``df.ly.infer_sublevels()`` to get the -additional columns. +Beyond that, we implement methods like :py:meth:`~LyDataAccessor.query` for filtering +the DataFrame using reusable query objects (see the :py:module:`lydata.querier` module +for more information), :py:meth:`~LyDataAccessor.stats` for computing common statistics +that we use in our `LyProX`_ web app, and :py:meth:`~LyDataAccessor.combine` for +combining diagnoses from different modalities into a single column. + +.. _LyProX: https://lyprox.org/ """ from __future__ import annotations @@ -36,372 +24,25 @@ import warnings from collections.abc import Callable from dataclasses import dataclass -from typing import Any, Literal +from typing import TYPE_CHECKING, Any, Literal import pandas as pd import pandas.api.extensions as pd_ext from lydata.augmentor import combine_and_augment_levels +from lydata.types import CanExecute from lydata.utils import ( ModalityConfig, + _get_all_true, get_default_column_map_new, get_default_column_map_old, get_default_modalities, ) -from lydata.validator import construct_schema warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning) -def _get_all_true(df: pd.DataFrame) -> pd.Series: - """Return a mask with all entries set to ``True``.""" - return pd.Series([True] * len(df)) - - -class CombineQMixin: - """Mixin class for combining queries. - - Four operators are defined for combining queries: - - 1. ``&`` for logical AND operations. - The returned object is an :py:class:`AndQ` instance and - when executed - - returns a boolean mask where both queries are satisfied. When the right-hand - side is ``None``, the left-hand side query object is returned unchanged. - 2. ``|`` for logical OR operations. - The returned object is an :py:class:`OrQ` instance and - when executed - - returns a boolean mask where either query is satisfied. When the right-hand - side is ``None``, the left-hand side query object is returned unchanged. - 3. ``~`` for inverting a query. - The returned object is a :py:class:`NotQ` instance and - when executed - - returns a boolean mask where the query is not satisfied. - 4. ``==`` for checking if two queries are equal. - Two queries are equal if their column names, operators, and values are equal. - Note that this does not check if the queries are semantically equal, i.e., if - they would return the same result when executed. - """ - - def __and__(self, other: QTypes | None) -> AndQ: - """Combine two queries with a logical AND.""" - return self if other is None else AndQ(self, other) - - def __or__(self, other: QTypes | None) -> OrQ: - """Combine two queries with a logical OR.""" - return self if other is None else OrQ(self, other) - - def __invert__(self) -> NotQ: - """Negate the query.""" - return NotQ(self) - - def __eq__(self, value): - """Check if two queries are equal.""" - return ( - isinstance(value, self.__class__) - and self.colname == value.colname - and self.operator == value.operator - and self.value == value.value - ) - - -class Q(CombineQMixin): - """Combinable query object for filtering a DataFrame. - - The syntax for this object is similar to Django's ``Q`` object. It can be used to - define queries in a more readable and modular way. - - .. caution:: - - The column names are not checked upon instantiation. This is only done when the - query is executed. In fact, the :py:class:`Q` object does not even know about - the :py:class:`~pandas.DataFrame` it will be applied to in the beginning. On the - flip side, this means a query may be reused for different DataFrames. - - The ``operator`` argument may be one of the following: - - - ``'=='``: Checks if ``column`` values are equal to the ``value``. - - ``'<'``: Checks if ``column`` values are less than the ``value``. - - ``'<='``: Checks if ``column`` values are less than or equal to ``value``. - - ``'>'``: Checks if ``column`` values are greater than the ``value``. - - ``'>='``: Checks if ``column`` values are greater than or equal to ``value``. - - ``'!='``: Checks if ``column`` values are not equal to the ``value``. This is - equivalent to ``~Q(column, '==', value)``. - - ``'in'``: Checks if ``column`` values are in the list of ``value``. For this, - pandas' :py:meth:`~pandas.Series.isin` method is used. - - ``'contains'``: Checks if ``column`` values contain the string ``value``. - Here, pandas' :py:meth:`~pandas.Series.str.contains` method is used. - - .. note:: - - During initialization, a private attribute ``_column_map`` is set to the - default column map returned by :py:func:`~lydata.utils.get_default_column_map`. - This is used to convert short column names to long ones. If one feels - adventurous, they may set this attribute to a custom column map containing - additional or other column short names. This could also be achieved by - subclassing the :py:class:`Q`. However, the attribute may change in the future, - and without notice. - """ - - _OPERATOR_MAP: dict[str, Callable[[pd.Series, Any], pd.Series]] = { - "==": lambda series, value: series == value, - "<": lambda series, value: series < value, - "<=": lambda series, value: series <= value, - ">": lambda series, value: series > value, - ">=": lambda series, value: series >= value, - "!=": lambda series, value: series != value, # same as ~Q("col", "==", value) - "in": lambda series, value: series.isin(value), # value is a list - "contains": lambda series, value: series.str.contains(value), # value is a str - } - - def __init__( - self, - column: str, - operator: Literal["==", "<", "<=", ">", ">=", "!=", "in", "contains"], - value: Any, - ) -> None: - """Create query object that can compare a ``column`` with a ``value``.""" - self.colname = column - self.operator = operator - self.value = value - - def __repr__(self) -> str: - """Return a string representation of the query.""" - return f"Q({self.colname!r}, {self.operator!r}, {self.value!r})" - - def execute(self, df: pd.DataFrame) -> pd.Series: - """Return a boolean mask where the query is satisfied for ``df``. - - >>> df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['foo', 'bar', 'baz']}) - >>> Q('col1', '<=', 2).execute(df) - 0 True - 1 True - 2 False - Name: col1, dtype: bool - >>> Q('col2', 'contains', 'ba').execute(df) - 0 False - 1 True - 2 True - Name: col2, dtype: bool - """ - column = df.ly[self.colname] - - if callable(self.value): - return self.value(column) - - return self._OPERATOR_MAP[self.operator](column, self.value) - - -class AndQ(CombineQMixin): - """Query object for combining two queries with a logical AND. - - >>> df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['foo', 'bar', 'baz']}) - >>> q1 = Q('col1', '!=', 3) - >>> q2 = Q('col2', 'contains', 'ba') - >>> and_q = q1 & q2 - >>> print(and_q) - (Q('col1', '!=', 3) & Q('col2', 'contains', 'ba')) - >>> isinstance(and_q, AndQ) - True - >>> and_q.execute(df) - 0 False - 1 True - 2 False - dtype: bool - >>> all((q1 & None).execute(df) == q1.execute(df)) - True - """ - - def __init__(self, q1: QTypes, q2: QTypes) -> None: - """Combine two queries with a logical AND.""" - self.q1 = q1 - self.q2 = q2 - - def __repr__(self) -> str: - """Return a string representation of the query.""" - return f"({self.q1!r} & {self.q2!r})" - - def execute(self, df: pd.DataFrame) -> pd.Series: - """Return a boolean mask where both queries are satisfied.""" - return self.q1.execute(df) & self.q2.execute(df) - - -class OrQ(CombineQMixin): - """Query object for combining two queries with a logical OR. - - >>> df = pd.DataFrame({'col1': [1, 2, 3]}) - >>> q1 = Q('col1', '==', 1) - >>> q2 = Q('col1', '==', 3) - >>> or_q = q1 | q2 - >>> print(or_q) - (Q('col1', '==', 1) | Q('col1', '==', 3)) - >>> isinstance(or_q, OrQ) - True - >>> or_q.execute(df) - 0 True - 1 False - 2 True - Name: col1, dtype: bool - >>> all((q1 | None).execute(df) == q1.execute(df)) - True - """ - - def __init__(self, q1: QTypes, q2: QTypes) -> None: - """Combine two queries with a logical OR.""" - self.q1 = q1 - self.q2 = q2 - - def __repr__(self) -> str: - """Return a string representation of the query.""" - return f"({self.q1!r} | {self.q2!r})" - - def execute(self, df: pd.DataFrame) -> pd.Series: - """Return a boolean mask where either query is satisfied.""" - return self.q1.execute(df) | self.q2.execute(df) - - -class NotQ(CombineQMixin): - """Query object for negating a query. - - >>> df = pd.DataFrame({'col1': [1, 2, 3]}) - >>> q = Q('col1', '==', 2) - >>> not_q = ~q - >>> print(not_q) - ~Q('col1', '==', 2) - >>> isinstance(not_q, NotQ) - True - >>> not_q.execute(df) - 0 True - 1 False - 2 True - Name: col1, dtype: bool - >>> print(~(Q('col1', '==', 2) & Q('col1', '!=', 3))) - ~(Q('col1', '==', 2) & Q('col1', '!=', 3)) - """ - - def __init__(self, q: QTypes) -> None: - """Negate the given query ``q``.""" - self.q = q - - def __repr__(self) -> str: - """Return a string representation of the query.""" - return f"~{self.q!r}" - - def execute(self, df: pd.DataFrame) -> pd.Series: - """Return a boolean mask where the query is not satisfied.""" - return ~self.q.execute(df) - - -class NoneQ(CombineQMixin): - """Query object that always returns the entire DataFrame. Useful as default.""" - - def __repr__(self) -> str: - """Return a string representation of the query.""" - return "NoneQ()" - - def execute(self, df: pd.DataFrame) -> pd.Series: - """Return a boolean mask with all entries set to ``True``.""" - return _get_all_true(df) - - -QTypes = Q | AndQ | OrQ | NotQ | None -"""Type for a query object or a combination of query objects.""" - - -class C: - """Wraps a column name and produces a :py:class:`Q` object upon comparison. - - This is basically a shorthand for creating a :py:class:`Q` object that avoids - writing the operator and value in quotes. Thus, it may be more readable and allows - IDEs to provide better autocompletion. - - .. caution:: - - Just like for the :py:class:`Q` object, it is not checked upon instantiation - whether the column name is valid. This is only done when the query is executed. - """ - - def __init__(self, *column: str) -> None: - """Create a column object for comparison. - - For querying multi-level columns, both the syntax ``C('col1', 'col2')`` and - ``C(('col1', 'col2'))`` is valid. - - >>> (C('col1', 'col2') == 1) == (C(('col1', 'col2')) == 1) - True - """ - self.column = column[0] if len(column) == 1 else column - - def __repr__(self) -> str: - """Return a string representation of the column object. - - >>> repr(C('foo')) - "C('foo')" - >>> repr(C('foo', 'bar')) - "C(('foo', 'bar'))" - """ - return f"C({self.column!r})" - - def __eq__(self, value: Any) -> Q: - """Create a query object for comparing equality. - - >>> C('foo') == 'bar' - Q('foo', '==', 'bar') - """ - return Q(self.column, "==", value) - - def __lt__(self, value: Any) -> Q: - """Create a query object for comparing less than. - - >>> C('foo') < 42 - Q('foo', '<', 42) - """ - return Q(self.column, "<", value) - - def __le__(self, value: Any) -> Q: - """Create a query object for comparing less than or equal. - - >>> C('foo') <= 42 - Q('foo', '<=', 42) - """ - return Q(self.column, "<=", value) - - def __gt__(self, value: Any) -> Q: - """Create a query object for comparing greater than. - - >>> C('foo') > 42 - Q('foo', '>', 42) - """ - return Q(self.column, ">", value) - - def __ge__(self, value: Any) -> Q: - """Create a query object for comparing greater than or equal. - - >>> C('foo') >= 42 - Q('foo', '>=', 42) - """ - return Q(self.column, ">=", value) - - def __ne__(self, value: Any) -> Q: - """Create a query object for comparing inequality. - - >>> C('foo') != 'bar' - Q('foo', '!=', 'bar') - """ - return Q(self.column, "!=", value) - - def isin(self, value: list[Any]) -> Q: - """Create a query object for checking if the column values are in a list. - - >>> C('foo').isin([1, 2, 3]) - Q('foo', 'in', [1, 2, 3]) - """ - return Q(self.column, "in", value) - - def contains(self, value: str) -> Q: - """Create a query object for checking if the column values contain a string. - - >>> C('foo').contains('bar') - Q('foo', 'contains', 'bar') - """ - return Q(self.column, "contains", value) +AggFuncType = dict[str | tuple[str, str, str], Callable[[pd.Series], pd.Series]] @dataclass @@ -462,31 +103,6 @@ def invert(self) -> QueryPortion: return QueryPortion(match=self.fail, total=self.total) -def align_diagnoses( - dataset: pd.DataFrame, - modalities: list[str], -) -> list[pd.DataFrame]: - """Stack aligned diagnosis tables in ``dataset`` for each of ``modalities``.""" - diagnosis_stack = [] - for modality in modalities: - try: - this = dataset[modality].copy().drop(columns=["info"], errors="ignore") - except KeyError: - warnings.warn(f"Did not find modality {modality}, cannot align. Skipping.") # noqa - continue - - for i, other in enumerate(diagnosis_stack): - this, other = this.align(other, join="outer") - diagnosis_stack[i] = other - - diagnosis_stack.append(this) - - return diagnosis_stack - - -AggFuncType = dict[str | tuple[str, str, str], Callable[[pd.Series], pd.Series]] - - @pd_ext.register_dataframe_accessor("ly") class LyDataAccessor: """Custom accessor for handling lymphatic involvement data. @@ -501,6 +117,14 @@ def __init__(self, obj: pd.DataFrame) -> None: self._column_map_old = get_default_column_map_old() self._column_map_new = get_default_column_map_new() + def _get_safe_long_old(self, key: Any) -> tuple[str, str, str]: + """Get the old long column name or return the input.""" + return getattr(self._column_map_old.from_short.get(key), "long", key) + + def _get_safe_long_new(self, key: Any) -> tuple[str, str, str]: + """Get the new long column name or return the input.""" + return getattr(self._column_map_new.from_short.get(key), "long", key) + def __contains__(self, key: str) -> bool: """Check if a column is contained in the DataFrame. @@ -519,24 +143,27 @@ def __contains__(self, key: str) -> bool: >>> ("patient", "info", "age") in df.ly True """ - _key_old = self._get_safe_long_old(key) - _key_new = self._get_safe_long_new(key) - return _key_new in self._obj or _key_old in self._obj + key_old = self._get_safe_long_old(key) + key_new = self._get_safe_long_new(key) + return key_new in self._obj or key_old in self._obj def __getitem__(self, key: str) -> pd.Series: - """Allow column access by short name, too.""" - _key_old = self._get_safe_long_old(key) - _key_new = self._get_safe_long_new(key) + """Allow column access by short name, too. - try: - return self._obj[_key_new] - except KeyError as err_from_new: - try: - return self._obj[_key_old] - except KeyError: - raise KeyError( - f"Neither '{_key_new}' nor '{_key_old}' found in DataFrame." - ) from err_from_new + >>> df = pd.DataFrame({("patient", "info", "nicotine_abuse"): [True, False]}) + >>> df.ly["smoke"] + 0 True + 1 False + Name: (patient, info, nicotine_abuse), dtype: bool + """ + key_old = self._get_safe_long_old(key) + key_new = self._get_safe_long_new(key) + + for key in (key_new, key_old): + if key in self: + return self._obj[key] + + raise KeyError(f"Neither '{key_new}' nor '{key_old}' found in DataFrame.") def __getattr__(self, name: str) -> Any: """Access columns also by short name. @@ -563,26 +190,11 @@ def __getattr__(self, name: str) -> Any: except KeyError as key_err: raise AttributeError(f"Attribute {name!r} not found.") from key_err - def _get_safe_long_old(self, key: Any) -> tuple[str, str, str]: - """Get the old long column name or return the input.""" - return getattr(self._column_map_old.from_short.get(key), "long", key) - - def _get_safe_long_new(self, key: Any) -> tuple[str, str, str]: - """Get the new long column name or return the input.""" - return getattr(self._column_map_new.from_short.get(key), "long", key) - def validate(self, modalities: list[str] | None = None) -> pd.DataFrame: - """Validate the DataFrame against the lydata schema. + """Validate the DataFrame against the lydata schema.""" + raise NotImplementedError("Validation is not yet implemented.") - The schema is constructed by the :py:func:`construct_schema` function using - the ``modalities`` provided or it will :py:func:`get_default_modalities` if - ``None`` are provided. - """ - modalities = modalities or list(get_default_modalities().keys()) - lydata_schema = construct_schema(modalities=modalities) - return lydata_schema.validate(self._obj) - - def get_modalities(self, _filter: list[str] | None = None) -> list[str]: + def get_modalities(self, ignore_cols: list[str] | None = None) -> list[str]: """Return the modalities present in this DataFrame. .. warning:: @@ -595,22 +207,33 @@ def get_modalities(self, _filter: list[str] | None = None) -> list[str]: top_level_cols = self._obj.columns.get_level_values(0) modalities = top_level_cols.unique().tolist() - for non_modality_col in _filter or [ - "patient", - "tumor", - "total_dissected", - "positive_dissected", - "enbloc_dissected", - "enbloc_positive", - ]: - try: - modalities.remove(non_modality_col) - except ValueError: - pass + if ignore_cols is None: + ignore_cols = [ + "patient", + "tumor", + "total_dissected", + "positive_dissected", + "enbloc_dissected", + "enbloc_positive", + ] + + for col in ignore_cols: + if col in modalities: + modalities.remove(col) return modalities - def query(self, query: QTypes = None) -> pd.DataFrame: + def _get_mask(self, query: CanExecute | None = None) -> pd.Series: + """Safely get a boolean mask for the DataFrame based on the query.""" + if query is None: + return _get_all_true(self._obj) + + if isinstance(query, CanExecute): + return query.execute(self._obj) + + raise TypeError(f"Cannot query with {type(query).__name__}.") + + def query(self, query: CanExecute | None = None) -> pd.DataFrame: """Return a DataFrame with rows that satisfy the ``query``. A query is a :py:class:`Q` object that can be combined with logical operators. @@ -620,6 +243,7 @@ def query(self, query: QTypes = None) -> pd.DataFrame: :py:class:`C` object as in the example below, where we query all entries where ``x`` is greater than 1 and not less than 3: + >>> from lydata import C >>> df = pd.DataFrame({'x': [1, 2, 3]}) >>> df.ly.query((C('x') > 1) & ~(C('x') < 3)) x @@ -629,24 +253,29 @@ def query(self, query: QTypes = None) -> pd.DataFrame: 0 1 2 3 """ - mask = (query or NoneQ()).execute(self._obj) + mask = self._get_mask(query) return self._obj[mask] - def portion(self, query: QTypes = None, given: QTypes = None) -> QueryPortion: + def portion( + self, + query: CanExecute | None = None, + given: CanExecute | None = None, + ) -> QueryPortion: """Compute how many rows satisfy a ``query``, ``given`` some other conditions. This returns a :py:class:`QueryPortion` object that contains the number of rows satisfying the ``query`` and ``given`` :py:class:`Q` object divided by the number of rows satisfying only the ``given`` condition. + >>> from lydata import C >>> df = pd.DataFrame({'x': [1, 2, 3]}) >>> df.ly.portion(query=C('x') == 2, given=C('x') > 1) QueryPortion(match=np.int64(1), total=np.int64(2)) >>> df.ly.portion(query=C('x') == 2, given=C('x') > 3) QueryPortion(match=np.int64(0), total=np.int64(0)) """ - given_mask = (given or NoneQ()).execute(self._obj) - query_mask = (query or NoneQ()).execute(self._obj) + given_mask = self._get_mask(given) + query_mask = self._get_mask(query) return QueryPortion( match=query_mask[given_mask].sum(), @@ -794,3 +423,12 @@ def augment( sensitivities=[1.0], # a single modality's involvement info. subdivisions=subdivisions, ) + + +if TYPE_CHECKING: + + class LyDataFrame: + """Type hint for lyDATA tables when using type checkers.""" + + ly: LyDataAccessor + """Type hint for the lydata accessor.""" diff --git a/src/lydata/types.py b/src/lydata/types.py new file mode 100644 index 0000000..15cd931 --- /dev/null +++ b/src/lydata/types.py @@ -0,0 +1,14 @@ +"""Protocol and type definitions for lydata package.""" + +from typing import Protocol, runtime_checkable + +import pandas as pd + + +@runtime_checkable +class CanExecute(Protocol): + """Protocol for objects that can :py:func:`execute` on a DataFrame.""" + + def execute(self, df: pd.DataFrame) -> pd.Series: + """Provide a binary mask for the ``df`` DataFrame.""" + ... diff --git a/src/lydata/utils.py b/src/lydata/utils.py index a28c093..cf6f354 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -242,3 +242,8 @@ def get_default_modalities() -> dict[str, ModalityConfig]: "pathology": ModalityConfig(spec=1.0, sens=1.0, kind="pathological"), "pCT": ModalityConfig(spec=0.86, sens=0.81), } + + +def _get_all_true(df: pd.DataFrame) -> pd.Series: + """Return a mask with all entries set to ``True``.""" + return pd.Series([True] * len(df)) From 90ef414c18229523c6538c250da2816945d2ba5b Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:41:43 +0200 Subject: [PATCH 07/78] change!: update schema for new 2nd lvl cols --- src/lydata/validator.py | 42 ++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/lydata/validator.py b/src/lydata/validator.py index ed46552..c51c599 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -57,31 +57,31 @@ class ParsingError(Exception): patient_columns = { - ("patient", "#", "institution"): Column(str), - ("patient", "#", "sex"): Column(str, Check.str_matches(r"^(male|female)$")), - ("patient", "#", "age"): Column(int), - ("patient", "#", "weight"): Column( + ("patient", "info", "institution"): Column(str), + ("patient", "info", "sex"): Column(str, Check.str_matches(r"^(male|female)$")), + ("patient", "info", "age"): Column(int), + ("patient", "info", "weight"): Column( float, Check.greater_than(0), **_NULLABLE_OPTIONAL ), - ("patient", "#", "diagnose_date"): Column(str, _DATE_CHECK), - ("patient", "#", "alcohol_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "#", "nicotine_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "#", "hpv_status"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "#", "neck_dissection"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "#", "tnm_edition"): Column(int, Check.in_range(7, 8)), - ("patient", "#", "n_stage"): Column(int, Check.in_range(0, 3)), - ("patient", "#", "m_stage"): Column(int, Check.in_range(-1, 1)), + ("patient", "info", "diagnose_date"): Column(str, _DATE_CHECK), + ("patient", "info", "alcohol_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "info", "nicotine_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "info", "hpv_status"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "info", "neck_dissection"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "info", "tnm_edition"): Column(int, Check.in_range(7, 8)), + ("patient", "info", "n_stage"): Column(int, Check.in_range(0, 3)), + ("patient", "info", "m_stage"): Column(int, Check.in_range(-1, 1)), } tumor_columns = { - ("tumor", "1", "subsite"): Column(str, Check.str_matches(r"^C\d{2}(\.\d)?$")), - ("tumor", "1", "t_stage"): Column(int, Check.in_range(0, 4)), - ("tumor", "1", "stage_prefix"): Column(str, Check.str_matches(r"^(p|c)$")), - ("tumor", "1", "volume"): Column( + ("tumor", "info", "subsite"): Column(str, Check.str_matches(r"^C\d{2}(\.\d)?$")), + ("tumor", "info", "t_stage"): Column(int, Check.in_range(0, 4)), + ("tumor", "info", "stage_prefix"): Column(str, Check.str_matches(r"^(p|c)$")), + ("tumor", "info", "volume"): Column( float, Check.greater_than(0), **_NULLABLE_OPTIONAL ), - ("tumor", "1", "central"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("tumor", "1", "extension"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("tumor", "info", "central"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("tumor", "info", "extension"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, } @@ -277,7 +277,7 @@ def transform_to_lyprox( .. code-block:: python column_map = { - ("patient", "#", "age"): { + ("patient", "info", "age"): { "func": compute_age_from_raw, "kwargs": {"randomize": False}, "columns": ["birthday", "date of diagnosis"] @@ -288,7 +288,7 @@ def transform_to_lyprox( values of the columns ``"birthday"`` and ``"date of diagnosis"`` as positional arguments, and the keyword argument ``"randomize"`` is set to ``False``. The function then returns the patient's age, which is subsequently stored in the column - ``("patient", "#", "age")``. + ``("patient", "info", "age")``. Alternatively, this dictionary can also have a nested, tree-like structure, like this: @@ -297,7 +297,7 @@ def transform_to_lyprox( column_map = { "patient": { - "#": { + "info": { "age": { "func": compute_age_from_raw, "kwargs": {"randomize": False}, From f7f41a0191564c07297b91dc39dfe00416cccf39 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:48:11 +0200 Subject: [PATCH 08/78] fix: use spec/sens < 1 in `augment` Not sure this is necessary, but I've got the feeling there may be edge cases where it could cause errors. --- src/lydata/accessor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 2923ee4..80ffabd 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -419,8 +419,8 @@ def augment( return combine_and_augment_levels( diagnoses=[self._obj[modality]], - specificities=[1.0], # Numbers here don't matter, as we only "combine" - sensitivities=[1.0], # a single modality's involvement info. + specificities=[0.9], # Numbers here don't matter, as we only "combine" + sensitivities=[0.9], # a single modality's involvement info. subdivisions=subdivisions, ) From eef4bd3d79a21dc2d6aae757af2f8f1d4dcdc3f8 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:50:47 +0200 Subject: [PATCH 09/78] feat: allow importing `LyDataFrame` type from root --- src/lydata/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lydata/__init__.py b/src/lydata/__init__.py index 55db9d7..462a164 100644 --- a/src/lydata/__init__.py +++ b/src/lydata/__init__.py @@ -3,6 +3,7 @@ from loguru import logger import lydata._version as _version +from lydata.accessor import LyDataFrame from lydata.loader import ( available_datasets, load_datasets, @@ -16,6 +17,7 @@ __version__ = _version.__version__ __all__ = [ + "LyDataFrame", "accessor", "Q", "C", From 9d52456a545d42b78c9fb553f43d7354a8c4ef58 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:31:15 +0200 Subject: [PATCH 10/78] fix: make `LyDataFrame` importable --- src/lydata/accessor.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 80ffabd..5a75276 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -24,7 +24,7 @@ import warnings from collections.abc import Callable from dataclasses import dataclass -from typing import TYPE_CHECKING, Any, Literal +from typing import Any, Literal import pandas as pd import pandas.api.extensions as pd_ext @@ -425,10 +425,8 @@ def augment( ) -if TYPE_CHECKING: +class LyDataFrame(pd.DataFrame): + """Type hint for lyDATA tables when using type checkers.""" - class LyDataFrame: - """Type hint for lyDATA tables when using type checkers.""" - - ly: LyDataAccessor - """Type hint for the lydata accessor.""" + ly: LyDataAccessor + """Type hint for the lydata accessor.""" From 374b25647fbe52ffb1e5583218bd06fbf8f3d403 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 13:13:12 +0200 Subject: [PATCH 11/78] fix: ensure alignment during combine/augment --- src/lydata/augmentor.py | 58 ++++++++++++------- ...test_infer_levels.py => test_augmentor.py} | 26 ++++++++- 2 files changed, 60 insertions(+), 24 deletions(-) rename tests/{test_infer_levels.py => test_augmentor.py} (50%) diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py index 809ba21..ef70633 100644 --- a/src/lydata/augmentor.py +++ b/src/lydata/augmentor.py @@ -31,33 +31,47 @@ def _keep_only_involvement(table: pd.DataFrame) -> pd.DataFrame: def _align_tables(tables: Sequence[pd.DataFrame]) -> list[pd.DataFrame]: """Align all columns in the sequence of ``tables``. - >>> one = pd.DataFrame({"a": [1, 2], "b": [3, 4]}) - >>> two = pd.DataFrame({"c": [5, 6], "a": [7, 8]}) - >>> aligned = _align_tables([one, two]) - >>> aligned[0] - a b c - 0 1 3 NaN - 1 2 4 NaN - >>> aligned[1] - a b c - 0 7 NaN 5 - 1 8 NaN 6 + >>> one = pd.DataFrame({ + ... ("x", "a"): [1, 2], + ... ("x", "b"): [3, 4], + ... ("y", "c"): [5, 6], + ... ("y", "b"): [19, 120], + ... }) + >>> two = pd.DataFrame({ + ... ("y", "c"): [91, 10], + ... ("y", "b"): [9, 10], + ... ("x", "a"): [7, 8], + ... }) + >>> three = pd.DataFrame({ + ... ("x", "c"): [71, 81], + ... ("y", "b"): [5, 6], + ... ("x", "a"): [5, 61], + ... }) + >>> aligned = _align_tables([one, two, three]) + >>> aligned[0] # doctest: +NORMALIZE_WHITESPACE + x y + a b c b c + 0 1 3 NaN 19 5 + 1 2 4 NaN 120 6 + >>> aligned[1] # doctest: +NORMALIZE_WHITESPACE + x y + a b c b c + 0 7 NaN NaN 9 91 + 1 8 NaN NaN 10 10 + >>> aligned[2] # doctest: +NORMALIZE_WHITESPACE + x y + a b c b c + 0 5 NaN 71 5 NaN + 1 61 NaN 81 6 NaN """ if len(tables) == 0: return [] - aligned_tables = [] - this = None - - for table in tables: - if this is None: - this = table.copy() - continue - - this, other = this.align(table, join="outer") - aligned_tables.append(other) + all_columns = tables[0].columns + for table in tables[1:]: + all_columns = all_columns.union(table.columns) - return [this] + aligned_tables + return [table.reindex(columns=all_columns) for table in tables] def _convert_to_float_matrix(diagnoses: Sequence[pd.DataFrame]) -> np.ndarray: diff --git a/tests/test_infer_levels.py b/tests/test_augmentor.py similarity index 50% rename from tests/test_infer_levels.py rename to tests/test_augmentor.py index 426486d..2960b95 100644 --- a/tests/test_infer_levels.py +++ b/tests/test_augmentor.py @@ -5,9 +5,11 @@ from lydata.utils import get_default_modalities -def test_augment_levels() -> None: +def test_clb_patient_17() -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" - clb_raw = next(lydata.load_datasets(institution="clb", subsite="oropharynx")) + clb_raw = next( + lydata.load_datasets(year=2021, institution="clb", subsite="oropharynx") + ) modalities = get_default_modalities() modalities = { name: mod @@ -23,3 +25,23 @@ def test_augment_levels() -> None: assert clb_aug.iloc[16].ipsi.I == False assert clb_aug.iloc[16].ipsi.Ia == False assert clb_aug.iloc[16].ipsi.Ib == False + + +def test_usz_patient_9() -> None: + """Check the advanced combination and augmentation of diagnoses and levels.""" + usz_raw = next( + lydata.load_datasets(year=2021, institution="usz", subsite="oropharynx") + ) + modalities = get_default_modalities() + modalities = { + name: mod + for name, mod in modalities.items() + if name in usz_raw.columns.get_level_values(0) + } + usz_aug = combine_and_augment_levels( + diagnoses=[usz_raw[mod] for mod in modalities.keys()], + specificities=[mod.spec for mod in modalities.values()], + sensitivities=[mod.sens for mod in modalities.values()], + ) + assert len(usz_aug) == len(usz_raw), "Augmented data length mismatch" + assert usz_aug.iloc[8].ipsi.III == False From 2a1b20cc318931b86e2c82c05b674a2cec094dac Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 31 Jul 2025 13:57:41 +0200 Subject: [PATCH 12/78] fix: change midlvl col from `info` to `core` --- src/lydata/accessor.py | 12 +++++------ src/lydata/utils.py | 10 +++++----- src/lydata/validator.py | 44 ++++++++++++++++++++--------------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 5a75276..b062d1c 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -135,12 +135,12 @@ def __contains__(self, key: str) -> bool: False >>> ("patient", "#", "age") in df.ly True - >>> df = pd.DataFrame({("patient", "info", "age"): [61, 52, 73]}) + >>> df = pd.DataFrame({("patient", "core", "age"): [61, 52, 73]}) >>> "age" in df.ly True >>> "foo" in df.ly False - >>> ("patient", "info", "age") in df.ly + >>> ("patient", "core", "age") in df.ly True """ key_old = self._get_safe_long_old(key) @@ -150,11 +150,11 @@ def __contains__(self, key: str) -> bool: def __getitem__(self, key: str) -> pd.Series: """Allow column access by short name, too. - >>> df = pd.DataFrame({("patient", "info", "nicotine_abuse"): [True, False]}) + >>> df = pd.DataFrame({("patient", "core", "nicotine_abuse"): [True, False]}) >>> df.ly["smoke"] 0 True 1 False - Name: (patient, info, nicotine_abuse), dtype: bool + Name: (patient, core, nicotine_abuse), dtype: bool """ key_old = self._get_safe_long_old(key) key_new = self._get_safe_long_new(key) @@ -174,12 +174,12 @@ def __getattr__(self, name: str) -> Any: 1 52 2 73 Name: (patient, #, age), dtype: int64 - >>> df = pd.DataFrame({("patient", "info", "age"): [61, 52, 73]}) + >>> df = pd.DataFrame({("patient", "core", "age"): [61, 52, 73]}) >>> df.ly.age 0 61 1 52 2 73 - Name: (patient, info, age), dtype: int64 + Name: (patient, core, age), dtype: int64 >>> df.ly.foo Traceback (most recent call last): ... diff --git a/src/lydata/utils.py b/src/lydata/utils.py index cf6f354..3419f7a 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -167,15 +167,15 @@ def _new_from_old(long_name: tuple[str, str, str]) -> tuple[str, str, str]: """Convert an old long key name to a new long key name. >>> _new_from_old(("patient", "#", "neck_dissection")) - ('patient', 'info', 'neck_dissection') + ('patient', 'core', 'neck_dissection') >>> _new_from_old(("tumor", "1", "t_stage")) - ('tumor', 'info', 't_stage') + ('tumor', 'core', 't_stage') >>> _new_from_old(("a", "b", "c")) ('a', 'b', 'c') """ start, middle, end = long_name if (start == "patient" and middle == "#") or (start == "tumor" and middle == "1"): - middle = "info" + middle = "core" return (start, middle, end) @@ -201,12 +201,12 @@ def get_default_column_map_new() -> _ColumnMap: 0 False ... 286 False - Name: (patient, info, neck_dissection), Length: 287, dtype: bool + Name: (patient, core, neck_dissection), Length: 287, dtype: bool >>> df.ly.smoke # doctest: +ELLIPSIS 0 True ... 286 True - Name: (patient, info, nicotine_abuse), Length: 287, dtype: bool + Name: (patient, core, nicotine_abuse), Length: 287, dtype: bool """ return _ColumnMap.from_list( [ diff --git a/src/lydata/validator.py b/src/lydata/validator.py index c51c599..8ad5c9f 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -57,31 +57,31 @@ class ParsingError(Exception): patient_columns = { - ("patient", "info", "institution"): Column(str), - ("patient", "info", "sex"): Column(str, Check.str_matches(r"^(male|female)$")), - ("patient", "info", "age"): Column(int), - ("patient", "info", "weight"): Column( + ("patient", "core", "institution"): Column(str), + ("patient", "core", "sex"): Column(str, Check.str_matches(r"^(male|female)$")), + ("patient", "core", "age"): Column(int), + ("patient", "core", "weight"): Column( float, Check.greater_than(0), **_NULLABLE_OPTIONAL ), - ("patient", "info", "diagnose_date"): Column(str, _DATE_CHECK), - ("patient", "info", "alcohol_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "info", "nicotine_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "info", "hpv_status"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "info", "neck_dissection"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "info", "tnm_edition"): Column(int, Check.in_range(7, 8)), - ("patient", "info", "n_stage"): Column(int, Check.in_range(0, 3)), - ("patient", "info", "m_stage"): Column(int, Check.in_range(-1, 1)), + ("patient", "core", "diagnose_date"): Column(str, _DATE_CHECK), + ("patient", "core", "alcohol_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "core", "nicotine_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "core", "hpv_status"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "core", "neck_dissection"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("patient", "core", "tnm_edition"): Column(int, Check.in_range(7, 8)), + ("patient", "core", "n_stage"): Column(int, Check.in_range(0, 3)), + ("patient", "core", "m_stage"): Column(int, Check.in_range(-1, 1)), } tumor_columns = { - ("tumor", "info", "subsite"): Column(str, Check.str_matches(r"^C\d{2}(\.\d)?$")), - ("tumor", "info", "t_stage"): Column(int, Check.in_range(0, 4)), - ("tumor", "info", "stage_prefix"): Column(str, Check.str_matches(r"^(p|c)$")), - ("tumor", "info", "volume"): Column( + ("tumor", "core", "subsite"): Column(str, Check.str_matches(r"^C\d{2}(\.\d)?$")), + ("tumor", "core", "t_stage"): Column(int, Check.in_range(0, 4)), + ("tumor", "core", "stage_prefix"): Column(str, Check.str_matches(r"^(p|c)$")), + ("tumor", "core", "volume"): Column( float, Check.greater_than(0), **_NULLABLE_OPTIONAL ), - ("tumor", "info", "central"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("tumor", "info", "extension"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("tumor", "core", "central"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, + ("tumor", "core", "extension"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, } @@ -90,7 +90,7 @@ def get_modality_columns( lnls: list[str] = _LNLS, ) -> dict[tuple[str, str, str], Column]: """Get the validation columns for a given modality.""" - cols = {(modality, "info", "date"): Column(str, _DATE_CHECK, **_NULLABLE_OPTIONAL)} + cols = {(modality, "core", "date"): Column(str, _DATE_CHECK, **_NULLABLE_OPTIONAL)} for side in ["ipsi", "contra"]: for lnl in lnls: @@ -277,7 +277,7 @@ def transform_to_lyprox( .. code-block:: python column_map = { - ("patient", "info", "age"): { + ("patient", "core", "age"): { "func": compute_age_from_raw, "kwargs": {"randomize": False}, "columns": ["birthday", "date of diagnosis"] @@ -288,7 +288,7 @@ def transform_to_lyprox( values of the columns ``"birthday"`` and ``"date of diagnosis"`` as positional arguments, and the keyword argument ``"randomize"`` is set to ``False``. The function then returns the patient's age, which is subsequently stored in the column - ``("patient", "info", "age")``. + ``("patient", "core", "age")``. Alternatively, this dictionary can also have a nested, tree-like structure, like this: @@ -297,7 +297,7 @@ def transform_to_lyprox( column_map = { "patient": { - "info": { + "core": { "age": { "func": compute_age_from_raw, "kwargs": {"randomize": False}, From 6b8c41bfe46ebbd56905e378de88c8a1abf48f79 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:02:54 +0200 Subject: [PATCH 13/78] docs: add more info to augment/combine --- src/lydata/accessor.py | 9 ++++++++- src/lydata/augmentor.py | 35 ++++++++++++++++++++++++++++++----- src/lydata/loader.py | 5 +++-- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index b062d1c..faaefa5 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -399,6 +399,11 @@ def augment( ) -> pd.DataFrame: """Complete the sub- and superlevel involvement columns. + Internally, this calls the :py:func:`~augmentor.combine_and_augment_levels` + function, but only with one single modality. This is useful if the intention + is not to combine multiple modalities, but rather to fill in the missing + super- and sub-level involvement columns for a single modality. + >>> df = pd.DataFrame({ ... ('MRI', 'ipsi' , 'I' ): [True , False, False, None], ... ('MRI', 'contra', 'I' ): [False, True , False, None], @@ -417,8 +422,10 @@ def augment( if modality not in self.get_modalities(): raise ValueError(f"Modality {modality!r} not found in DataFrame.") + obj_copy = self._obj.copy() + return combine_and_augment_levels( - diagnoses=[self._obj[modality]], + diagnoses=[obj_copy[modality]], specificities=[0.9], # Numbers here don't matter, as we only "combine" sensitivities=[0.9], # a single modality's involvement info. subdivisions=subdivisions, diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py index ef70633..c12e22b 100644 --- a/src/lydata/augmentor.py +++ b/src/lydata/augmentor.py @@ -168,7 +168,29 @@ def combine_and_augment_levels( sides: Sequence[Literal["ipsi", "contra"]] | None = None, subdivisions: Mapping[str, Sequence[str]] | None = None, ) -> pd.DataFrame: - """Combine ``diagnoses`` and add sub-/superlevel involvement info.""" + """Combine ``diagnoses`` and add sub-/superlevel involvement info. + + Different diagnostic modalities may conflict with each other, e.g. on MRI an + LNL may look metastatic, while FNA finds no malignancy. This function combines + available diagnoses based on their ``sensitivities`` and ``specificities`` + into a sort of consensus. When choosing the ``method="max_llh"``, the most likely/ + probable diagnosis is chosen. If ``method="rank"``, the single most trustworthy + diagnosis is kept. + + Additionally, the function may add and resolve sub- and superlevel involvement + information. For example, some datasets report the overall involvement in LNL II, + while others differentiate between sublevels IIa and IIb. Now, if IIa harbors + disease, that means that the overall involvement in II is also true. By specifying + ``subdivisions``, the function consistently updates these super- and sublevel + involvement patterns. + + The returned :py:class:`~pandas.DataFrame` has a two-level multi-index: One level + for each of the ``sides`` and the second level for the involvement levels. This + means it i in the same format as the stack of input ``diagnoses``. + + See the accessor methods ``:py:meth:`~lydata.accessor.LyDataAccessor.augment`` and + ``:py:meth:`~lydata.accessor.LyDataAccessor.combine`` for some examples. + """ diagnoses = [_keep_only_involvement(table) for table in diagnoses] diagnoses = _align_tables(diagnoses) matrix = _convert_to_float_matrix(diagnoses) @@ -267,12 +289,15 @@ def combine_and_augment_levels( sublvl_col = (side, sublvl) is_sub_unknown = combined[sublvl_col].isna() does_super_determine_unknown_sub_involved = ( - is_super_involved # This combination of conditions means that the - & is_sub_unknown # current `sublvl` is unknown, while all others - & is_one_sub_unknown # are healthy, while the superlvl is involved. - & ~is_any_sub_involved # Then, we change the sublvl to involved. + is_super_involved + & is_sub_unknown + & is_one_sub_unknown + & ~is_any_sub_involved & (involved_probs[superlvl_col] > super_healthy_prob_from_subs) ) + # The above combination of conditions means that the current `sublvl` is + # unknown, while all others are healthy, while the superlvl is involved. + # Then below, we change the sublvl to involved. combined.loc[does_super_determine_unknown_sub_involved, sublvl_col] = True # combined = combined[sorted(combined.columns.get_level_values(0))] diff --git a/src/lydata/loader.py b/src/lydata/loader.py index 7b08d2a..d310999 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -33,6 +33,7 @@ from loguru import logger from pydantic import BaseModel, Field, PrivateAttr, constr +from lydata.accessor import LyDataFrame from lydata.utils import get_github_auth _default_repo_name = "lycosystem/lydata" @@ -148,7 +149,7 @@ def get_dataframe( user: str | None = None, password: str | None = None, **load_kwargs, - ) -> pd.DataFrame: + ) -> LyDataFrame: """Load the ``data.csv`` file from disk or from GitHub. One can also choose to ``use_github``. Any keyword arguments are passed to @@ -308,7 +309,7 @@ def load_datasets( repo_name: str = _default_repo_name, ref: str = "main", **kwargs, -) -> Generator[pd.DataFrame, None, None]: +) -> Generator[LyDataFrame, None, None]: """Load matching datasets from the disk. It loads every dataset from the :py:class:`.LyDataset` instances generated by From 229e00bd93e6d52f4f7b3781bc3ae95662ea3b35 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:04:38 +0200 Subject: [PATCH 14/78] feat: add working sorting functions --- src/lydata/utils.py | 104 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index 3419f7a..b0004bd 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -1,14 +1,17 @@ """Utility functions and classes.""" import os +import re from collections.abc import Callable from dataclasses import dataclass, field +from functools import cmp_to_key from typing import Any, Literal import pandas as pd from github import Auth from loguru import logger from pydantic import BaseModel, Field +from roman import fromRoman as roman_to_int # noqa: N813 def get_github_auth( @@ -247,3 +250,104 @@ def get_default_modalities() -> dict[str, ModalityConfig]: def _get_all_true(df: pd.DataFrame) -> pd.Series: """Return a mask with all entries set to ``True``.""" return pd.Series([True] * len(df)) + + +def _get_numeral_with_sub_value(key: str) -> float: + """Get the value of a Roman numeral with an optional sublevel. + + >>> _get_numeral_with_sub_value("I") + 1.0 + >>> _get_numeral_with_sub_value("IIa") + 2.01 + >>> _get_numeral_with_sub_value("IXb") + 9.02 + """ + match = re.match(r"([IVXLCDM]+)([a-z]?)", key) + if match is None: + raise ValueError(f"Invalid Roman numeral with sublevel: {key}") + numeral, sublvl = match.groups() + + base = roman_to_int(numeral) + addition = 0.0 + + if len(sublvl) == 1: + addition = "abcdefghijklmnopqrstuvwxyz".index(sublvl) / 100.0 + 0.01 + + return base + addition + + +def _top_lvl_cmp(left: str, right: str) -> int: + """Compare two top-level column names.""" + if left == right: + return 0 + + if left == "patient": + return -1 + + if right == "patient": + return 1 + + if left == "tumor": + return -1 + + if right == "tumor": + return 1 + + return (left > right) - (left < right) + + +def _mid_lvl_cmp(left: str, right: str) -> int: + """Compare two mid-level column names.""" + if left == right: + return 0 + + if left == "core": + return -1 + + if right == "core": + return 1 + + return (left > right) - (left < right) + + +def _lnl_cmp(left: str, right: str) -> int: + """Compare two roman numeral LNLs.""" + try: + left_value = _get_numeral_with_sub_value(left) + right_value = _get_numeral_with_sub_value(right) + return (left_value > right_value) - (left_value < right_value) + except ValueError: + return (left > right) - (left < right) + + +def _sort_by( + dataset: pd.DataFrame, + which: Literal["top", "mid", "lnl"], + level: int | None = None, +) -> pd.DataFrame: + """Sort the DataFrame columns by the specified level.""" + if level is None: + level = ["top", "mid", "lnl"].index(which) + + cmps = { + "top": _top_lvl_cmp, + "mid": _mid_lvl_cmp, + "lnl": _lnl_cmp, + } + + if which not in cmps: + raise ValueError(f"Invalid sorting level: {which} ('top', 'mid', or 'lnl').") + + if level < 0 or level > 2: + raise ValueError(f"Invalid level: {level} (must be 0, 1, or 2).") + + columns = dataset.columns.get_level_values(level).unique() + sorted_columns = sorted(columns, key=cmp_to_key(cmps[which])) + return dataset.reindex(columns=sorted_columns, level=level) + + +def _sort_all(dataset: pd.DataFrame) -> pd.DataFrame: + """Sort the DataFrame columns by all levels.""" + dataset = _sort_by(dataset, "lnl", level=2) + dataset = _sort_by(dataset, "mid", level=1) + return _sort_by(dataset, "top", level=0) From 46358206563189ea6c3116ded29e4afe1ca18139 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:05:17 +0200 Subject: [PATCH 15/78] feat: add convenience `.ly.enhance()` method --- src/lydata/accessor.py | 41 +++++++++++++++++++++++++++++++++++++++-- src/lydata/augmentor.py | 36 ++++-------------------------------- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index faaefa5..ecc9740 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -22,7 +22,7 @@ from __future__ import annotations import warnings -from collections.abc import Callable +from collections.abc import Callable, Mapping, Sequence from dataclasses import dataclass from typing import Any, Literal @@ -34,9 +34,11 @@ from lydata.utils import ( ModalityConfig, _get_all_true, + _sort_all, get_default_column_map_new, get_default_column_map_old, get_default_modalities, + update_and_expand, ) warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning) @@ -383,9 +385,10 @@ def combine( 4 None """ modalities = self._filter_modalities(modalities) + obj_copy = self._obj.copy() return combine_and_augment_levels( - diagnoses=[self._obj[mod] for mod in modalities.keys()], + diagnoses=[obj_copy[mod] for mod in modalities.keys()], specificities=[mod.spec for mod in modalities.values()], sensitivities=[mod.sens for mod in modalities.values()], method=method, @@ -431,6 +434,40 @@ def augment( subdivisions=subdivisions, ) + def enhance( + self, + modalities: dict[str, ModalityConfig] | None = None, + method: Literal["max_llh", "rank"] = "max_llh", + subdivisions: Mapping[str, Sequence[str]] | None = None, + ) -> LyDataFrame: + """Shorthand for first combining ``modalities`` and then augmenting them. + + This first runs the :py:meth:`~LyDataAccessor.combine` method and after that + the :py:meth:`~LyDataAccessor.augment` for every modality in ``modalities`` + and the newly combined ``method``. + """ + if modalities is None: + modalities = get_default_modalities() + + combined = self.combine(modalities=modalities, method=method) + combined = pd.concat({method: combined}, axis="columns") + enhanced: LyDataFrame = self._obj.join(combined) + enhanced, _ = enhanced.align(combined, axis="columns") + + for modality in list(modalities.keys()) + [method]: + if modality not in enhanced.columns: + continue + + augmented = enhanced.ly.augment( + modality=modality, + subdivisions=subdivisions, + ) + augmented = pd.concat({modality: augmented}, axis="columns") + enhanced = update_and_expand(left=enhanced, right=augmented) + enhanced, _ = enhanced.align(augmented, axis="columns") + + return _sort_all(enhanced) + class LyDataFrame(pd.DataFrame): """Type hint for lyDATA tables when using type checkers.""" diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py index c12e22b..2c095c2 100644 --- a/src/lydata/augmentor.py +++ b/src/lydata/augmentor.py @@ -1,13 +1,13 @@ """Provides functions for augmenting and enhancing the lyDATA tables.""" -import re from collections.abc import Mapping, Sequence from itertools import product from typing import Literal import numpy as np import pandas as pd -from roman import fromRoman as roman_to_int # noqa: N813 + +from lydata.utils import _sort_by def _keep_only_involvement(table: pd.DataFrame) -> pd.DataFrame: @@ -90,27 +90,6 @@ def _convert_to_float_matrix(diagnoses: Sequence[pd.DataFrame]) -> np.ndarray: return np.astype(matrix, float) -def _get_numeral_with_sub_value(key: str) -> float: - """Get the value of a Roman numeral with an optional sublevel. - - >>> _get_numeral_with_sub_value("I") - 1.0 - >>> _get_numeral_with_sub_value("IIa") - 2.01 - >>> _get_numeral_with_sub_value("IXb") - 9.02 - """ - numeral, sublvl = re.match(r"([IVXLCDM]+)([a-z]?)", key).groups() - - base = roman_to_int(numeral) - addition = 0.0 - - if len(sublvl) == 1: - addition = "abcdefghijklmnopqrstuvwxyz".index(sublvl) / 100.0 + 0.01 - - return base + addition - - def _compute_likelihoods( diagnosis_matrix: np.ndarray, sensitivities: np.ndarray, @@ -300,12 +279,5 @@ def combine_and_augment_levels( # Then below, we change the sublvl to involved. combined.loc[does_super_determine_unknown_sub_involved, sublvl_col] = True - # combined = combined[sorted(combined.columns.get_level_values(0))] - - combined = combined.sort_index( - axis="columns", - level=1, - sort_remaining=False, - key=lambda idx: [_get_numeral_with_sub_value(str(x)) for x in idx], - ) - return combined.sort_index(axis="columns", level=0, sort_remaining=False) + combined = _sort_by(combined, which="lnl", level=1) + return _sort_by(combined, which="mid", level=0) From cebbacd3667402314f7c52f76cee9f307eb435b9 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:05:53 +0200 Subject: [PATCH 16/78] test: add basic `.ly.combine()` test --- tests/test_accessor.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/test_accessor.py diff --git a/tests/test_accessor.py b/tests/test_accessor.py new file mode 100644 index 0000000..bb50743 --- /dev/null +++ b/tests/test_accessor.py @@ -0,0 +1,29 @@ +"""Test the ``.ly`` accessor for lyDATA DataFrames.""" + +import pytest + +import lydata # noqa: F401 +from lydata import loader + + +@pytest.fixture +def usz_df() -> lydata.LyDataFrame: + """Fixture to load a sample DataFrame from the USZ dataset.""" + return next( + loader.load_datasets( + year=2021, + institution="usz", + repo_name="lycosystem/lydata.private", + ref="fb55afa26ff78afa78274a86b131fb3014d0ceea", + ) + ) + + +def test_enhance(usz_df: lydata.LyDataFrame) -> None: + """Test the enhance method of the ly accessor.""" + enhanced = usz_df.ly.enhance() + assert enhanced.shape == (287, 250) + assert "max_llh" in enhanced.columns + assert "Ia" in enhanced.max_llh.ipsi + assert "Ib" in enhanced.max_llh.ipsi + assert "I" in enhanced.max_llh.ipsi From aff4c795710350ed4a8c3f146a89eb31b6fa8416 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:33:47 +0200 Subject: [PATCH 17/78] change: improve final sorting of tables --- src/lydata/utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index b0004bd..45b97e7 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -293,6 +293,12 @@ def _top_lvl_cmp(left: str, right: str) -> int: if right == "tumor": return 1 + if left == "max_llh": + return -1 + + if right == "max_llh": + return 1 + return (left > right) - (left < right) @@ -317,6 +323,11 @@ def _lnl_cmp(left: str, right: str) -> int: right_value = _get_numeral_with_sub_value(right) return (left_value > right_value) - (left_value < right_value) except ValueError: + if "id" in left: + return -1 + if "id" in right: + return 1 + return (left > right) - (left < right) From c89275db9964a0553baf26dbeeb601cb28211b40 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:38:34 +0200 Subject: [PATCH 18/78] test: add scripts to compare augment/combine --- tests/compare.py | 8 ++++++++ tests/new.py | 38 ++++++++++++++++++++++++++++++++++++++ tests/old.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 tests/compare.py create mode 100644 tests/new.py create mode 100644 tests/old.py diff --git a/tests/compare.py b/tests/compare.py new file mode 100644 index 0000000..6470f86 --- /dev/null +++ b/tests/compare.py @@ -0,0 +1,8 @@ +# /// script +# requires-python = ">=3.10" +# dependencies = [ +# "lydata @ git+https://github.com/lycosystem/lydata-package@aff4c795710350ed4a8c3f146a89eb31b6fa8416", +# ] +# /// + +"""Compare new and old datasets for differences.""" diff --git a/tests/new.py b/tests/new.py new file mode 100644 index 0000000..2e29cdc --- /dev/null +++ b/tests/new.py @@ -0,0 +1,38 @@ +# /// script +# requires-python = ">=3.10" +# dependencies = [ +# "lydata @ git+https://github.com/lycosystem/lydata-package@aff4c795710350ed4a8c3f146a89eb31b6fa8416", +# ] +# /// + +"""Get all datasets and enhance them using the new lydata package.""" + +import pandas as pd +from loguru import logger + +import lydata +from lydata.accessor import LyDataFrame + +logger.enable("lydata") + + +def main() -> None: + """Run the main function to load and enhance datasets.""" + full_dataset: LyDataFrame = pd.DataFrame() + for dataset in lydata.load_datasets( + repo_name="lycosystem/lydata.private", + ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", + ): + full_dataset = pd.concat([full_dataset, dataset], ignore_index=True) + logger.info(f"Added {len(dataset)=} rows to the full dataset.") + + enhanced_dataset = full_dataset.ly.enhance() + added_cols = enhanced_dataset.shape[1] - full_dataset.shape[1] + logger.info(f"Enhanced dataset has {added_cols} new columns.") + + enhanced_dataset.to_csv("new.csv", index=False) + logger.success("Enhanced dataset saved to 'new.csv'.") + + +if __name__ == "__main__": + main() diff --git a/tests/old.py b/tests/old.py new file mode 100644 index 0000000..5fc96cc --- /dev/null +++ b/tests/old.py @@ -0,0 +1,37 @@ +# /// script +# requires-python = ">=3.10" +# dependencies = [ +# "lydata==0.3.3", +# ] +# /// + +"""Get all datasets and enhance them using the old lydata package.""" + +import pandas as pd +from loguru import logger + +import lydata + +logger.enable("lydata") + + +def main() -> None: + """Run the main function to load and enhance datasets.""" + full_dataset = pd.DataFrame() + for dataset in lydata.load_datasets( + repo_name="lycosystem/lydata.private", + ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", + ): + full_dataset = pd.concat([full_dataset, dataset], ignore_index=True) + logger.info(f"Added {len(dataset)=} rows to the full dataset.") + + enhanced_dataset = lydata.infer_and_combine_levels(full_dataset) + added_cols = enhanced_dataset.shape[1] - full_dataset.shape[1] + logger.info(f"Enhanced dataset has {added_cols} new columns.") + + enhanced_dataset.to_csv("old.csv", index=False) + logger.success("Enhanced dataset saved to 'old.csv'.") + + +if __name__ == "__main__": + main() From fce13ba672103ec5e19f01140a275e7b045c3cd9 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 10:58:49 +0200 Subject: [PATCH 19/78] test: check one patient with specific issue --- tests/test_augmentor.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index 2960b95..7816f46 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -1,15 +1,29 @@ """Check that inferring sub- and super-levels works correctly.""" +import pandas as pd +import pytest + import lydata # noqa: F401 from lydata.augmentor import combine_and_augment_levels from lydata.utils import get_default_modalities -def test_clb_patient_17() -> None: - """Check the advanced combination and augmentation of diagnoses and levels.""" - clb_raw = next( - lydata.load_datasets(year=2021, institution="clb", subsite="oropharynx") +@pytest.fixture +def clb_raw() -> pd.DataFrame: + """Load the CLB dataset.""" + return next( + lydata.load_datasets( + year=2021, + institution="clb", + subsite="oropharynx", + use_github=True, + ref="4668ff6006764169411d6d198c126b020a7892b2", + ), ) + + +def test_clb_patient_17(clb_raw: pd.DataFrame) -> None: + """Check the advanced combination and augmentation of diagnoses and levels.""" modalities = get_default_modalities() modalities = { name: mod @@ -27,6 +41,15 @@ def test_clb_patient_17() -> None: assert clb_aug.iloc[16].ipsi.Ib == False +def test_clb_patient_p011(clb_raw: pd.DataFrame) -> None: + """Check that this patient's `NaN` values are handled correctly.""" + idx = clb_raw.ly.id == "P011" + patient = clb_raw.loc[idx] + enhanced = patient.ly.enhance() + + assert enhanced.iloc[0].pathology.ipsi.II == patient.iloc[0].pathology.ipsi.II + + def test_usz_patient_9() -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" usz_raw = next( From 2beacecf9b6ea60de1f6aad910ab4ff0bb1dabce Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 10:59:17 +0200 Subject: [PATCH 20/78] fix: don't override super when subs unknown --- src/lydata/augmentor.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py index 2c095c2..506557c 100644 --- a/src/lydata/augmentor.py +++ b/src/lydata/augmentor.py @@ -226,12 +226,13 @@ def combine_and_augment_levels( is_any_sub_involved = combined[sublvl_cols].any(axis=1) is_one_sub_unknown = combined[sublvl_cols].isna().sum(axis=1) == 1 are_all_subs_healthy = (combined[sublvl_cols] == False).all(axis=1) + are_all_subs_unknown = combined[sublvl_cols].isna().all(axis=1) # Superlvl unknown => no conflict, use sublvl info combined.loc[is_super_unknown & is_any_sub_involved, superlvl_col] = True combined.loc[is_super_unknown & are_all_subs_healthy, superlvl_col] = False - # Sublevels unknown => no conflict, use superlvl info + # No sublvl involved => no conflict, use superlvl info combined.loc[~is_any_sub_involved & is_super_healthy, sublvl_cols] = False # Conflicts @@ -239,13 +240,17 @@ def combine_and_augment_levels( super_healthy_prob_from_subs = np.nanprod(healthy_probs[sublvl_cols], axis=1) super_involved_prob_from_subs = 1.0 - super_healthy_prob_from_subs - do_subs_determine_super_healthy = is_super_involved & ( - super_healthy_prob_from_subs > involved_probs[superlvl_col] + do_subs_determine_super_healthy = ( + is_super_involved + & ~are_all_subs_unknown + & (super_healthy_prob_from_subs > involved_probs[superlvl_col]) ) combined.loc[do_subs_determine_super_healthy, superlvl_col] = False - do_subs_determine_super_involved = is_super_healthy & ( - super_involved_prob_from_subs > healthy_probs[superlvl_col] + do_subs_determine_super_involved = ( + is_super_healthy + & ~are_all_subs_unknown + & (super_involved_prob_from_subs > healthy_probs[superlvl_col]) ) combined.loc[do_subs_determine_super_involved, superlvl_col] = True From dba7666188f109258df1bda49e5d555adce87e47 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 11:39:13 +0200 Subject: [PATCH 21/78] fix: join using "outer" in enhance --- src/lydata/accessor.py | 2 +- tests/test_augmentor.py | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index ecc9740..c6b9cbb 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -451,7 +451,7 @@ def enhance( combined = self.combine(modalities=modalities, method=method) combined = pd.concat({method: combined}, axis="columns") - enhanced: LyDataFrame = self._obj.join(combined) + enhanced: LyDataFrame = self._obj.join(combined, how="outer") enhanced, _ = enhanced.align(combined, axis="columns") for modality in list(modalities.keys()) + [method]: diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index 7816f46..d200ff9 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -8,7 +8,7 @@ from lydata.utils import get_default_modalities -@pytest.fixture +@pytest.fixture(scope="module") def clb_raw() -> pd.DataFrame: """Load the CLB dataset.""" return next( @@ -42,14 +42,31 @@ def test_clb_patient_17(clb_raw: pd.DataFrame) -> None: def test_clb_patient_p011(clb_raw: pd.DataFrame) -> None: - """Check that this patient's `NaN` values are handled correctly.""" + """Check that this patient's `NaN` values are handled correctly. + + In this patient, the sublvls are missing, therefore the superlvls should not be + overridden by the augmentor. + """ idx = clb_raw.ly.id == "P011" patient = clb_raw.loc[idx] enhanced = patient.ly.enhance() - assert enhanced.iloc[0].pathology.ipsi.II == patient.iloc[0].pathology.ipsi.II +def test_clb_patient_p035(clb_raw: pd.DataFrame) -> None: + """Check that this patient's `NaN` values are handled correctly. + + In this patient, pathology reports ipsi.Ib as healthy, while diagnostic consensus + reports ipsi.Ib as involved. This should correctly be combined to ipsi.Ib = False + and the superlvl should also be set to False. + """ + idx = clb_raw.ly.id == "P035" + patient = clb_raw.loc[idx] + enhanced = patient.ly.enhance() + assert enhanced.iloc[0].max_llh.ipsi.I == False + assert enhanced.iloc[0].max_llh.ipsi.Ib == False + + def test_usz_patient_9() -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" usz_raw = next( From a2c157c20d0df5a94ff958f1bd2bf2626e952f31 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 14:56:31 +0200 Subject: [PATCH 22/78] fix: `None`s due to index mismatch etc. --- src/lydata/accessor.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index c6b9cbb..d7f4fc5 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -38,7 +38,6 @@ get_default_column_map_new, get_default_column_map_old, get_default_modalities, - update_and_expand, ) warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning) @@ -451,7 +450,8 @@ def enhance( combined = self.combine(modalities=modalities, method=method) combined = pd.concat({method: combined}, axis="columns") - enhanced: LyDataFrame = self._obj.join(combined, how="outer") + combined.index = self._obj.index + enhanced: LyDataFrame = pd.concat([self._obj, combined], axis="columns") enhanced, _ = enhanced.align(combined, axis="columns") for modality in list(modalities.keys()) + [method]: @@ -463,7 +463,9 @@ def enhance( subdivisions=subdivisions, ) augmented = pd.concat({modality: augmented}, axis="columns") - enhanced = update_and_expand(left=enhanced, right=augmented) + augmented.index = enhanced.index + enhanced = enhanced.drop(columns=[modality]) + enhanced = pd.concat([enhanced, augmented], axis="columns") enhanced, _ = enhanced.align(augmented, axis="columns") return _sort_all(enhanced) From 382aa461a5a9c2a7cde32bf54cb4253cf0d01f30 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 14:58:16 +0200 Subject: [PATCH 23/78] test: add util doctest (though unnecessary) --- src/lydata/utils.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index 45b97e7..c8acb40 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -56,6 +56,12 @@ def update_and_expand( 0 1.0 3 6 1 3.0 4 7 2 4.0 5 8 + >>> left = pd.DataFrame({("x", "a"): [None], ("y", "b"): [1]}) + >>> right = pd.DataFrame({("x", "a"): [2], ("y", "c"): [3]}) + >>> update_and_expand(left, right) # doctest: +NORMALIZE_WHITESPACE + x y + a b c + 0 2 1 3 """ result = left.copy() result.update(right, **update_kwargs) @@ -198,7 +204,7 @@ def get_default_column_map_new() -> _ColumnMap: >>> df = next(loader.load_datasets( ... institution="usz", ... repo_name="lycosystem/lydata.private", - ... ref="ce2ac255b8aec7443375b610e5254a46bf236a46", + ... ref="fb55afa26ff78afa78274a86b131fb3014d0ceea", ... )) >>> df.ly.surgery # doctest: +ELLIPSIS 0 False From 9952c31bcc62ffbe50825d61ea73cd7dd245c04a Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 14:58:40 +0200 Subject: [PATCH 24/78] test: add some more patient-specific checks --- tests/conftest.py | 20 +++++++++++++++++++ tests/test_accessor.py | 2 +- tests/test_augmentor.py | 44 ++++++++++++++++++++++++++--------------- tests/test_utils.py | 18 +++++++++++++++++ 4 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 tests/conftest.py create mode 100644 tests/test_utils.py diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..4160a7b --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,20 @@ +"""Fixtures for testing lydata functionality.""" + +import pandas as pd +import pytest + +import lydata + + +@pytest.fixture(scope="session") +def clb_raw() -> pd.DataFrame: + """Load the CLB dataset.""" + return next( + lydata.load_datasets( + year=2021, + institution="clb", + subsite="oropharynx", + use_github=True, + ref="4668ff6006764169411d6d198c126b020a7892b2", + ), + ) diff --git a/tests/test_accessor.py b/tests/test_accessor.py index bb50743..27f8018 100644 --- a/tests/test_accessor.py +++ b/tests/test_accessor.py @@ -22,7 +22,7 @@ def usz_df() -> lydata.LyDataFrame: def test_enhance(usz_df: lydata.LyDataFrame) -> None: """Test the enhance method of the ly accessor.""" enhanced = usz_df.ly.enhance() - assert enhanced.shape == (287, 250) + assert enhanced.shape == (287, 244) assert "max_llh" in enhanced.columns assert "Ia" in enhanced.max_llh.ipsi assert "Ib" in enhanced.max_llh.ipsi diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index d200ff9..7fa0434 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -1,27 +1,12 @@ """Check that inferring sub- and super-levels works correctly.""" import pandas as pd -import pytest import lydata # noqa: F401 from lydata.augmentor import combine_and_augment_levels from lydata.utils import get_default_modalities -@pytest.fixture(scope="module") -def clb_raw() -> pd.DataFrame: - """Load the CLB dataset.""" - return next( - lydata.load_datasets( - year=2021, - institution="clb", - subsite="oropharynx", - use_github=True, - ref="4668ff6006764169411d6d198c126b020a7892b2", - ), - ) - - def test_clb_patient_17(clb_raw: pd.DataFrame) -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" modalities = get_default_modalities() @@ -63,6 +48,7 @@ def test_clb_patient_p035(clb_raw: pd.DataFrame) -> None: idx = clb_raw.ly.id == "P035" patient = clb_raw.loc[idx] enhanced = patient.ly.enhance() + assert len(patient) == len(enhanced) == 1, "Patient data length mismatch" assert enhanced.iloc[0].max_llh.ipsi.I == False assert enhanced.iloc[0].max_llh.ipsi.Ib == False @@ -70,7 +56,13 @@ def test_clb_patient_p035(clb_raw: pd.DataFrame) -> None: def test_usz_patient_9() -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" usz_raw = next( - lydata.load_datasets(year=2021, institution="usz", subsite="oropharynx") + lydata.load_datasets( + year=2021, + institution="usz", + subsite="oropharynx", + use_github=True, + ref="4668ff6006764169411d6d198c126b020a7892b2", + ), ) modalities = get_default_modalities() modalities = { @@ -85,3 +77,23 @@ def test_usz_patient_9() -> None: ) assert len(usz_aug) == len(usz_raw), "Augmented data length mismatch" assert usz_aug.iloc[8].ipsi.III == False + + +def test_usz_patient_usz0079() -> None: + """Check that this patient...""" + usz_raw = next( + lydata.load_datasets( + year=2025, + institution="usz", + subsite="hypopharynx-larynx", + use_github=True, + repo_name="lycosystem/lydata.private", + ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", + ), + ) + idx = usz_raw.ly.id == "USZ0079" + patient = usz_raw.loc[idx] + enhanced = patient.ly.enhance() + assert enhanced.iloc[0].max_llh.ipsi.II == True + assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIa) + assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIb) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..192b779 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,18 @@ +"""Tet some of the utility functions in `lydata.utils`.""" + +import pandas as pd + +from lydata.utils import update_and_expand + + +def test_update_and_expand_using_p035(clb_raw: pd.DataFrame) -> None: + """Check the `update_and_expand` function with a specific patient.""" + idx = clb_raw.ly.id == "P035" + patient = clb_raw.loc[idx] + combined = patient.ly.combine() + combined = pd.concat({"test": combined}, axis="columns") + augmented = combined.ly.augment(modality="test") + augmented = pd.concat({"test": augmented}, axis="columns") + result = update_and_expand(combined, augmented) + assert len(result) == 1 + assert not pd.isna(result.iloc[0].test.ipsi.I) From 01a62ec12d504365bfd51302526cccc371bfd0ce Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:44:47 +0200 Subject: [PATCH 25/78] fix: replace instead of udpdate augmented cols --- src/lydata/accessor.py | 4 ++-- src/lydata/utils.py | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index d7f4fc5..7e7eddd 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -38,6 +38,7 @@ get_default_column_map_new, get_default_column_map_old, get_default_modalities, + replace, ) warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning) @@ -464,8 +465,7 @@ def enhance( ) augmented = pd.concat({modality: augmented}, axis="columns") augmented.index = enhanced.index - enhanced = enhanced.drop(columns=[modality]) - enhanced = pd.concat([enhanced, augmented], axis="columns") + enhanced = replace(left=enhanced, right=augmented) enhanced, _ = enhanced.align(augmented, axis="columns") return _sort_all(enhanced) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index c8acb40..d1829cf 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -56,12 +56,6 @@ def update_and_expand( 0 1.0 3 6 1 3.0 4 7 2 4.0 5 8 - >>> left = pd.DataFrame({("x", "a"): [None], ("y", "b"): [1]}) - >>> right = pd.DataFrame({("x", "a"): [2], ("y", "c"): [3]}) - >>> update_and_expand(left, right) # doctest: +NORMALIZE_WHITESPACE - x y - a b c - 0 2 1 3 """ result = left.copy() result.update(right, **update_kwargs) @@ -73,6 +67,16 @@ def update_and_expand( return result +def replace(left: pd.DataFrame, right: pd.DataFrame) -> pd.DataFrame: + """Replace all columns in ``left`` with those from ``right``.""" + result = left.copy() + + for column in right.columns: + result[column] = right[column] + + return result + + @dataclass class _ColumnSpec: """Class for specifying column names and aggfuncs. From 116a70b433c6fd5947a6656619aa8a1d3dba58a2 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 5 Aug 2025 16:42:27 +0200 Subject: [PATCH 26/78] test: add scripts to compare old vs new --- scripts/.gitignore | 2 + scripts/Makefile | 24 +++++ scripts/README.md | 31 ++++++ scripts/compare.py | 58 ++++++++++ scripts/new.pretty.csv | 222 ++++++++++++++++++++++++++++++++++++++ {tests => scripts}/new.py | 2 +- scripts/old.pretty.csv | 222 ++++++++++++++++++++++++++++++++++++++ {tests => scripts}/old.py | 0 tests/compare.py | 8 -- tests/test_accessor.py | 2 +- 10 files changed, 561 insertions(+), 10 deletions(-) create mode 100644 scripts/.gitignore create mode 100644 scripts/Makefile create mode 100644 scripts/README.md create mode 100644 scripts/compare.py create mode 100644 scripts/new.pretty.csv rename {tests => scripts}/new.py (96%) create mode 100644 scripts/old.pretty.csv rename {tests => scripts}/old.py (100%) delete mode 100644 tests/compare.py diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..038359c --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,2 @@ +*.csv +!*.pretty.csv diff --git a/scripts/Makefile b/scripts/Makefile new file mode 100644 index 0000000..2f2783d --- /dev/null +++ b/scripts/Makefile @@ -0,0 +1,24 @@ +.PHONY: all old new compare pretty-table-old pretty-table-new + +all: old.csv new.csv compare pretty-table-old pretty-table-new + +old.csv: old.py + uv run old.py + +new.csv: new.py + uv run new.py + +compare: old.csv new.csv + uv run compare.py old.csv new.csv + +old.diff.csv new.diff.csv: compare + @true # compare.py is assumed to produce both diff files + +pretty-table-old: old.diff.csv + uvx tabulate -f "simple" -s "," old.diff.csv > old.pretty.csv + +pretty-table-new: new.diff.csv + uvx tabulate -f "simple" -s "," new.diff.csv > new.pretty.csv + +clean: + rm -f old.csv new.csv old.diff.csv new.diff.csv old.pretty.csv new.pretty.csv diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..e800164 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,31 @@ +# Upgrade from lydata 0.3.3 to 0.4.0 + +Since we noticed [an issue with how the data is combined], a new version is in the works. To double check that now - finally - everything is working as expected, we need to compare the old and new data. + +## Reproduce Comparison Files + +This `scripts` directory contains the `new.py` and `old.py` scripts, which fetch the exact same data from the lyDATA repo, but once use the old version and once the new dev version. + +> [!IMPORTANT] +> To run these scripts, you need to have [`uv`] installed, because - as far as I know - only this tool allows automatically installing the required dependencies from the [inline script metadata] and puts them in a temporary virtual environment. + +Simply run the following command in the `scripts` directory: + +```bash +make all +``` + +## Looking at the Differences + +Now, you can compare the `old.pretty.csv` and `new.pretty.csv` files. This is best done e.g. inside VS Code: + +1. Open `old.pretty.csv` +2. Press `Ctrl + Shift + P` to open the command palette +3. Type `Compare Active File With...` and select it +4. Select `new.pretty.csv` from the list + +Now you have the old file on the left and the new file on the right. Any changes are highlighted and allow for a relatively easy comparison. + +[an issue with how the data is combined]: https://github.com/lycosystem/lydata-package/issues/7 +[`uv`]: https://docs.astral.sh/uv/ +[inline script metadata]: https://packaging.python.org/en/latest/specifications/inline-script-metadata/#inline-script-metadata diff --git a/scripts/compare.py b/scripts/compare.py new file mode 100644 index 0000000..5eb5a6b --- /dev/null +++ b/scripts/compare.py @@ -0,0 +1,58 @@ +# /// script +# requires-python = ">=3.10" +# dependencies = [ +# "lydata @ git+https://github.com/lycosystem/lydata-package@01a62ec12d504365bfd51302526cccc371bfd0ce", +# "typer", +# ] +# /// + +"""Compare new and old datasets for differences.""" + +from pathlib import Path + +import pandas as pd +from loguru import logger + +from lydata.utils import _sort_all + + +def main(old_file: Path, new_file: Path) -> None: + """Compare old and new datasets.""" + old = pd.read_csv(old_file, header=[0, 1, 2]) + logger.info(f"Loading old dataset from {old_file}") + new = pd.read_csv(new_file, header=[0, 1, 2]) + logger.info(f"Loading new dataset from {new_file}") + + old, new = old.align(new, axis="columns", join="outer") + is_equal = (old == new) | (old.isna() & new.isna()) + logger.info(f"Num of different cells (total): {(~is_equal).sum().sum()}") + is_equal = (old.max_llh == new.max_llh) | (old.max_llh.isna() & new.max_llh.isna()) + logger.info(f"Num of different cells (max_llh): {(~is_equal).sum().sum()}") + + old = _sort_all(old) + new = _sort_all(new) + + old_diff, new_diff = [], [] + + for (_, old_row), (_, new_row) in zip(old.iterrows(), new.iterrows(), strict=True): + is_equal = (old_row == new_row) | (old_row.isna() & new_row.isna()) + if not is_equal.all(): + old_diff.append(old_row) + new_diff.append(new_row) + + old_diff = pd.DataFrame(old_diff, columns=old.columns) + new_diff = pd.DataFrame(new_diff, columns=new.columns) + + old_file = old_file.with_suffix(".diff.csv") + new_file = new_file.with_suffix(".diff.csv") + + old_diff.to_csv(old_file, index=False) + logger.success(f"Saving {old_diff.shape=} diff to {old_file}") + new_diff.to_csv(new_file, index=False) + logger.success(f"Saving {new_diff.shape=} diff to {new_file}") + + +if __name__ == "__main__": + import typer + + typer.run(main) diff --git a/scripts/new.pretty.csv b/scripts/new.pretty.csv new file mode 100644 index 0000000..d3ee300 --- /dev/null +++ b/scripts/new.pretty.csv @@ -0,0 +1,222 @@ +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives +# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi +id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI +P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 +P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 +P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 +P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 +P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 +P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 +P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 +P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 +P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 +P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 +P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 +P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 +P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 +P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 +P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 +P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 +P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 +P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 +P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 +P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 +P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 +P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 +P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 +P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 +P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 +P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 +P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False True False False False False False False True False False True False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 +P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 +P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 +P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 +P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 +P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 +P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 +P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 +P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 +P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 +P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 +P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 +P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 +P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 +P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 +P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True True False True True True False True False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 +P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 +P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 +8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True +12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True +21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False +29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 +33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False +61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False +89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False +132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True +154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False +157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False +278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False +CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 +CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 +CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 +CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 +CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 +CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 +CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 +CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 +CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 +CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 +CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 +CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 +CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 +CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 +CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 +CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 +CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 +CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 +CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 +CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 +CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 +CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 +CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 +CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 +CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 +CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 +CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 +CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 +CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 +CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 +CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 +CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 +CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 +CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 +CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 +CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 +CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 +CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 +CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 +CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 +CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 +CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 +CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 +CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 +CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 +CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 +CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 +CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 +CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 +CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 +CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 +CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 +CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 +CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 +CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 +CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 +CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 +CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 +CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 +CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 +CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 +CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 +CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 +CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 +CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 +CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 +CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 +CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 +CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 +CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 +CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 +CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 +CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 +CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 +CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 +CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 +CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 +CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 +CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 +CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 +CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 +CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False False True True False False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 +CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False False True False False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 +CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 +CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 +CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 +CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 +CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 +CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 +CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 +CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 +CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 +CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 +CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 +CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 +CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 +CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 +CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 +CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 +CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 +CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 +CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 +CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 +CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 +CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 +CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 +CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 +CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 +CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 +CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 +CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 +CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 +CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 +CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 +CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 +CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 +BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 +BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 +BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 +BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 +BE578 64 False 2014-05-14 False True Inselspital Bern 0 1 True False male 7 central True True larynx c C32.1 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False 2014-10-05 False False False True True True True True False False False False False False False False False False False False False False 2014-05-21 False False False True True False False False False False False 6a 6a 45b 45b 45b 45b 1b 1b 1b 1b False False False False False False False False False 2014-03-06 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2014-03-06 c-IIa&c-III 20.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36.0 13.0 7.0 6.0 23.0 4.0 5.0 115.0 2014-03-06 1.0 9.0 1.0 8.0 1.0 9.0 4.0 5.0 +BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 +BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 +BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 +BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 +BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 +BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 +62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False +75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True +117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False True True False True False True True 2015-02-26 False False False True True False True False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False +123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False +157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False +UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 +UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True True False True False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 +UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 +UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 +UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 +UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 +UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 +UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 +UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 +UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 +UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 +UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 +UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 +UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 +UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 +USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False +USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False +USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False +USZ0079 70 False 2016-04-05 False University Hospital Zurich 0 2 True True male 7 left False True larynx p C32.9 4 False False False True False False False False False False False False False False True False False False False False False False 2016-04-05 False False False False False False False False True True False False False False False False False False 2016-03-29 False False False True True False False False False False False False False False False False False False False False False False False False False False 2016-11-07 False False False False False False False False False False False False False False False False False False False 2016-04-29 +USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True True False False False False False False False False False True True False True False True False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False +USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False +USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False +USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False +USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False +USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False +USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False +USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 +USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False +USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False +USZ0310 57 True 2013-06-03 False University Hospital Zurich 0 0 True True female 8 right False True hypopharynx p C13.0 4 False False False False False False False False False False False False False False False False True False False False False False False False 2013-06-13 False False False False False False False False False False False False False False 2013-06-13 False False False True True False False False False False False False False 2013-07-25 False False False False False +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- diff --git a/tests/new.py b/scripts/new.py similarity index 96% rename from tests/new.py rename to scripts/new.py index 2e29cdc..a40062e 100644 --- a/tests/new.py +++ b/scripts/new.py @@ -1,7 +1,7 @@ # /// script # requires-python = ">=3.10" # dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@aff4c795710350ed4a8c3f146a89eb31b6fa8416", +# "lydata @ git+https://github.com/lycosystem/lydata-package@01a62ec12d504365bfd51302526cccc371bfd0ce", # ] # /// diff --git a/scripts/old.pretty.csv b/scripts/old.pretty.csv new file mode 100644 index 0000000..cd1f050 --- /dev/null +++ b/scripts/old.pretty.csv @@ -0,0 +1,222 @@ +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives +# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi +id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI +P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 +P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 +P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 +P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 +P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 +P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 +P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True False False True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 +P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 +P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 +P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 +P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 +P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False True False False True False False False False True False False False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 +P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 +P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 +P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 +P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 +P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 +P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 +P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 +P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 +P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 +P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 +P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 +P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 +P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 +P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 +P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False False False True False False False False False False True False False True False False False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 +P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 +P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 +P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 +P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 +P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 +P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 +P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 +P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 +P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 +P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 +P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False True False False True False False False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 +P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 +P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 +P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 +P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True False False True False True True True False True False False False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 +P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 +P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 +8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True False False True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True +12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True +21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False +29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 +33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False +61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True False False True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False +89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False +132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True False False True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True +154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False False False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False +157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False +278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False False False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False +CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 +CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 +CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 +CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 +CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 +CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 +CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 +CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 +CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 +CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 +CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 +CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 +CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 +CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 +CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 +CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 +CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 +CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 +CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 +CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 +CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 +CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 +CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 +CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 +CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 +CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 +CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 +CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 +CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 +CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 +CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 +CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 +CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 +CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 +CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 +CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 +CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 +CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 +CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 +CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 +CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 +CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 +CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 +CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 +CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 +CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 +CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 +CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 +CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 +CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 +CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 +CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 +CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 +CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 +CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 +CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 +CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 +CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 +CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 +CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 +CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 +CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 +CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 +CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 +CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 +CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 +CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 +CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 +CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 +CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 +CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 +CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 +CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 +CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 +CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 +CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 +CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 +CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 +CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 +CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 +CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 +CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False True True False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 +CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False True False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 +CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 +CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 +CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 +CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 +CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 +CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 +CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 +CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 +CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 +CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 +CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 +CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 +CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 +CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 +CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 +CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 +CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 +CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 +CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 +CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 +CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 +CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 +CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 +CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 +CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 +CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 +CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 +CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 +CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 +CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 +CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 +CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 +CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 +BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 +BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 True False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 +BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 +BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 +BE578 64 False 2014-05-14 False True Inselspital Bern 0 1 True False male 7 central True True larynx c C32.1 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-10-05 False False False True True True True True False False False False False False False False False False False False False False 2014-05-21 False False False True True False False False False False False 6a 6a 45b 45b 45b 45b 1b 1b 1b 1b False False False False False False False False False 2014-03-06 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2014-03-06 c-IIa&c-III 20.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36.0 13.0 7.0 6.0 23.0 4.0 5.0 115.0 2014-03-06 1.0 9.0 1.0 8.0 1.0 9.0 4.0 5.0 +BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True False False True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 +BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 +BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 +BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 +BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 +BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 +62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False +75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True False False True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True +117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False False False False True False True False True True 2015-02-26 False False False True True False False False False False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False +123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False +157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False +UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 +UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True True False True False False False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 +UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 +UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 +UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 +UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 +UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 +UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 +UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 +UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 +UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True False False True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 +UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 +UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 +UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 +UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 +USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False +USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False +USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False +USZ0079 70 False 2016-04-05 False University Hospital Zurich 0 2 True True male 7 left False True larynx p C32.9 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-04-05 False False False False False False False False True True False False False False False False False False 2016-03-29 False False False True True False False False False False False False False False False False False False False False False False False False False False 2016-11-07 False False False False False False False False False False False False False False False False False False False 2016-04-29 +USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True False False True False False False False False False False False False True True False True False True False False False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False +USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False +USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False +USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False +USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False +USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False +USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False +USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 +USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False +USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True False False True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False +USZ0310 57 True 2013-06-03 False University Hospital Zurich 0 0 True True female 8 right False True hypopharynx p C13.0 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-13 False False False False False False False False False False False False False False 2013-06-13 False False False True True False False False False False False False False 2013-07-25 False False False False False +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- diff --git a/tests/old.py b/scripts/old.py similarity index 100% rename from tests/old.py rename to scripts/old.py diff --git a/tests/compare.py b/tests/compare.py deleted file mode 100644 index 6470f86..0000000 --- a/tests/compare.py +++ /dev/null @@ -1,8 +0,0 @@ -# /// script -# requires-python = ">=3.10" -# dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@aff4c795710350ed4a8c3f146a89eb31b6fa8416", -# ] -# /// - -"""Compare new and old datasets for differences.""" diff --git a/tests/test_accessor.py b/tests/test_accessor.py index 27f8018..bb50743 100644 --- a/tests/test_accessor.py +++ b/tests/test_accessor.py @@ -22,7 +22,7 @@ def usz_df() -> lydata.LyDataFrame: def test_enhance(usz_df: lydata.LyDataFrame) -> None: """Test the enhance method of the ly accessor.""" enhanced = usz_df.ly.enhance() - assert enhanced.shape == (287, 244) + assert enhanced.shape == (287, 250) assert "max_llh" in enhanced.columns assert "Ia" in enhanced.max_llh.ipsi assert "Ib" in enhanced.max_llh.ipsi From 3ac933850d56c9269516047606aab9aad20359d3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:44:29 +0200 Subject: [PATCH 27/78] docs: update some docstrings --- src/lydata/accessor.py | 56 ++++++++++++++++++++++++++--------------- src/lydata/augmentor.py | 14 ++++++++++- src/lydata/loader.py | 5 +--- src/lydata/utils.py | 4 +-- 4 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 7e7eddd..e1584aa 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -47,9 +47,12 @@ AggFuncType = dict[str | tuple[str, str, str], Callable[[pd.Series], pd.Series]] -@dataclass +@dataclass # we use a dataclass over pydantic, because it allows positional arguments class QueryPortion: - """Dataclass for storing the portion of a query.""" + """Dataclass for storing the portion of a query. + + An instance of this is returned by the :py:meth:`LyDataAccessor.portion` method. + """ match: int total: int @@ -94,7 +97,7 @@ def percent(self) -> float: >>> QueryPortion(2, 5).percent 40.0 """ - return self.ratio * 100 + return self.ratio * 100.0 def invert(self) -> QueryPortion: """Return the inverted portion. @@ -204,7 +207,7 @@ def get_modalities(self, ignore_cols: list[str] | None = None) -> list[str]: This method assumes that all top-level columns are modalities, except for some predefined non-modality columns. For some custom dataset, this may not be correct. In that case, you should provide a list of columns to - ``_filter``, i.e., the columns that are *not* modalities. + ``ignore_cols``, i.e., the columns that are *not* modalities. """ top_level_cols = self._obj.columns.get_level_values(0) modalities = top_level_cols.unique().tolist() @@ -295,7 +298,7 @@ def stats( The ``agg_funcs`` argument is a mapping of column names to functions that receive a :py:class:`pd.Series` and return a :py:class:`pd.Series`. The default is a useful selection of statistics for the most common columns. E.g., for the - column ``('patient', 'info', 'age')`` (or its short column name ``age``), the + column ``('patient', 'core', 'age')`` (or its short column name ``age``), the default function returns the value counts. The ``use_shortnames`` argument determines whether the output should use the @@ -314,9 +317,9 @@ def stats( 'hpv': {True: 2, False: 1, None: 1}, 't_stage': {2: 2, 3: 1, 1: 1}} >>> df = pd.DataFrame({ - ... ('patient', 'info', 'age'): [61, 52, 73, 61], - ... ('patient', 'info', 'hpv_status'): [True, False, None, True], - ... ('tumor', 'info', 't_stage'): [2, 3, 1, 2], + ... ('patient', 'core', 'age'): [61, 52, 73, 61], + ... ('patient', 'core', 'hpv_status'): [True, False, None, True], + ... ('tumor', 'core', 't_stage'): [2, 3, 1, 2], ... }) >>> df.ly.stats() # doctest: +NORMALIZE_WHITESPACE {'age': {61: 2, 52: 1, 73: 1}, @@ -343,7 +346,7 @@ def _filter_modalities( self, modalities: dict[str, ModalityConfig] | None = None, ) -> dict[str, ModalityConfig]: - """Return only those ``modalities`` present in data.""" + """Keep only those ``modalities`` present in data.""" if modalities is None: modalities = get_default_modalities() @@ -367,8 +370,19 @@ def combine( diagnosis is chosen for each patient and level based on the sensitivity and specificity of the given list of ``modalities``. - The result contains only the combined columns. The intended use is to - :py:meth:`~pandas.DataFrame.update` the original DataFrame with the result. + The result contains only the combined columns and no top-level header. This + means that if you want to add that to the original DataFrame, you could do so + like this: + + .. code-block:: python + + combined = data.ly.combine() + combined_full_header = pd.concat({"foo": combined}, axis="columns") + combined_full_header.index = data.index + data = pd.concat([data, combined_full_header], axis="columns") + + The method :py:func:`.enhance` is a shorthand for combining, augmenting, and + joining the results in a way similar to that example above. >>> df = pd.DataFrame({ ... ('CT' , 'ipsi', 'I'): [False, True , False, True, None], @@ -402,10 +416,13 @@ def augment( ) -> pd.DataFrame: """Complete the sub- and superlevel involvement columns. - Internally, this calls the :py:func:`~augmentor.combine_and_augment_levels` - function, but only with one single modality. This is useful if the intention - is not to combine multiple modalities, but rather to fill in the missing - super- and sub-level involvement columns for a single modality. + This is useful if the intention is not to combine multiple modalities, but + rather to fill in the missing super- and sub-level involvement columns for a + single modality. + + Like the :py:meth:`~LyDataAccessor.combine` method, the returned DataFrame + only has a two-level header. So, for combining this with the original data, + one has to perform additional steps. Or use the :py:meth:`.enhance` method. >>> df = pd.DataFrame({ ... ('MRI', 'ipsi' , 'I' ): [True , False, False, None], @@ -444,7 +461,7 @@ def enhance( This first runs the :py:meth:`~LyDataAccessor.combine` method and after that the :py:meth:`~LyDataAccessor.augment` for every modality in ``modalities`` - and the newly combined ``method``. + and the newly combined ``method`` column. """ if modalities is None: modalities = get_default_modalities() @@ -453,7 +470,6 @@ def enhance( combined = pd.concat({method: combined}, axis="columns") combined.index = self._obj.index enhanced: LyDataFrame = pd.concat([self._obj, combined], axis="columns") - enhanced, _ = enhanced.align(combined, axis="columns") for modality in list(modalities.keys()) + [method]: if modality not in enhanced.columns: @@ -466,13 +482,13 @@ def enhance( augmented = pd.concat({modality: augmented}, axis="columns") augmented.index = enhanced.index enhanced = replace(left=enhanced, right=augmented) - enhanced, _ = enhanced.align(augmented, axis="columns") return _sort_all(enhanced) +# Using the class below instead of pd.DataFrame enables IDE type hints. class LyDataFrame(pd.DataFrame): - """Type hint for lyDATA tables when using type checkers.""" + """Subclass of a pandas DataFrame with a custom lydata accessor.""" ly: LyDataAccessor - """Type hint for the lydata accessor.""" + """The custom lydata accessor for these DataFrame subclass instances.""" diff --git a/src/lydata/augmentor.py b/src/lydata/augmentor.py index 506557c..93391e0 100644 --- a/src/lydata/augmentor.py +++ b/src/lydata/augmentor.py @@ -1,4 +1,16 @@ -"""Provides functions for augmenting and enhancing the lyDATA tables.""" +"""Provides functions for augmenting and enhancing the lyDATA tables. + +This module does the heavy lifting of inferring the most likely true involvment based +on several - possibly conflicting - diagnoses and their sensitivities and +specificities. It also resolves the sub- and super-level involvement information, +e.g. if a sublevel is involved, the superlevel is also involved, and vice-versa. + +All this is achieved in the :py:func:`combine_and_augment_levels` function, which is +also used by the :py:meth:`~lydata.accessor.LyDataAccessor.combine`, +:py:meth:`~lydata.accessor.LyDataAccessor.augment`, and +:py:meth:`~lydata.accessor.LyDataAccessor.enhance` methods of the +:py:class:`~lydata.accessor.LyDataAccessor` class. +""" from collections.abc import Mapping, Sequence from itertools import product diff --git a/src/lydata/loader.py b/src/lydata/loader.py index d310999..0f7f1be 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -3,7 +3,7 @@ The loading itself is implemented in the :py:class:`.LyDataset` class, which is a :py:class:`pydantic.BaseModel` subclass. It validates the unique specification that identifies a dataset and then allows loading it from the disk (if present) or -from GitHub. +from GitHub (default). The :py:func:`available_datasets` function can be used to create a generator of such :py:class:`.LyDataset` instances, corresponding to all available datasets that @@ -14,9 +14,6 @@ :py:func:`available_datasets` but returns a generator of :py:class:`pandas.DataFrame` instead of :py:class:`.LyDataset`. -Lastly, with the :py:func:`join_datasets` function, one can load and concatenate all -datasets matching the given specs/pattern into a single :py:class:`pandas.DataFrame`. - The docstring of all functions contains some basic doctest examples. """ diff --git a/src/lydata/utils.py b/src/lydata/utils.py index d1829cf..e06e3c0 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -19,7 +19,7 @@ def get_github_auth( user: str | None = None, password: str | None = None, ) -> Auth.Auth | None: - """Get the GitHub authentication object.""" + """Get the GitHub authentication object from arguments or environment variables.""" token = token or os.getenv("GITHUB_TOKEN") user = user or os.getenv("GITHUB_USER") password = password or os.getenv("GITHUB_PASSWORD") @@ -368,7 +368,7 @@ def _sort_by( def _sort_all(dataset: pd.DataFrame) -> pd.DataFrame: - """Sort the DataFrame columns by all levels.""" + """Use the custom sorting to sort the DataFrame columns by all levels.""" dataset = _sort_by(dataset, "lnl", level=2) dataset = _sort_by(dataset, "mid", level=1) return _sort_by(dataset, "top", level=0) From 0d725adbcc38ac31daeead9397f225e56d0335ac Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 9 Jul 2025 12:12:56 +0200 Subject: [PATCH 28/78] feat: add basic pydantic patient/tumor model --- .gitignore | 2 +- src/lydata/schema.py | 112 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 src/lydata/schema.py diff --git a/.gitignore b/.gitignore index 0437039..bc8e0b4 100644 --- a/.gitignore +++ b/.gitignore @@ -176,5 +176,5 @@ pyrightconfig.json # End of https://www.toptal.com/developers/gitignore/api/python **/_version.py -# VS Code +## VS Code .vscode/ diff --git a/src/lydata/schema.py b/src/lydata/schema.py new file mode 100644 index 0000000..1328d67 --- /dev/null +++ b/src/lydata/schema.py @@ -0,0 +1,112 @@ +"""Pydantic schema to define a single patient record. + +Based on such a schema, pandera can create a DataFrameSchema to validate lyDATA sets. +Also, it may be used to create a HTML form to enter patient data. +""" + +from datetime import date +from typing import Literal + +from pydantic import BaseModel, Field + + +class PatientInfo(BaseModel): + """Basic required patient information.""" + + id: str | int = Field(description="Unique but anonymized identifier for a patient.") + institution: str = Field(description="Hospital where the patient was treated.") + sex: Literal["male", "female"] = Field(description="Biological sex of the patient.") + age: int = Field( + ge=0, + le=120, + description="Age of the patient at the time of diagnosis in years.", + ) + diagnose_date: date = Field(description="Date of diagnosis of the patient.") + alcohol_abuse: bool = Field(description="Whether the patient abused alcohol.") + nicotine_abuse: bool = Field(description="Whether the patient abused nicotine.") + pack_years: float | None = Field( + default=None, + ge=0, + description="Number of pack years of nicotine abuse.", + ) + hpv_status: bool | None = Field( + default=None, + description="Whether the patient was infected with HPV.", + ) + neck_dissection: bool = Field(description="Did the patient have a neck dissection?") + tnm_edition: int = Field( + ge=6, + le=8, + default=8, + description="Edition of the TNM classification used for staging.", + ) + n_stage: int = Field( + ge=0, + le=4, + description="N stage of the patient according to the TNM classification.", + ) + m_stage: int | None = Field( + ge=0, + le=1, + description="M stage of the patient according to the TNM classification.", + ) + + +class PatientRecord(BaseModel): + """A patient's record. + + As of now, this only contains the patient information. + """ + + info: PatientInfo = Field(default_factory=PatientInfo, alias="_") + + +class TumorInfo(BaseModel): + """Information about the tumor of a patient.""" + + location: str = Field(description="Primary tumor location.") + subsite: str = Field( + description="ICD-O-3 subsite of the primary tumor.", + pattern=r"C[0-9]{2}(\.[0-9X])?", + ) + central: bool = Field( + description="Whether the tumor is located on the mid-sagittal line.", + default=False, + ) + extension: bool = Field( + description="Whether the tumor extends over the mid-sagittal line.", + default=False, + ) + volume: float | None = Field( + default=None, + ge=0, + description="Estimated volume of the tumor in cm³.", + ) + stage_prefix: Literal["c", "p"] = Field( + default="c", + description="Prefix for the tumor stage, 'c' = clinical, 'p' = pathological.", + ) + t_stage: int = Field( + ge=0, + le=4, + description="T stage of the tumor according to the TNM classification.", + ) + + +class TumorRecord(BaseModel): + """A tumor record of a patient. + + As of now, this only contains the tumor information. + """ + + info: TumorInfo = Field(default_factory=TumorInfo, alias="_") + + +class CompleteRecord(BaseModel): + """A complete patient record. + + This combines the patient and tumor records. + """ + + patient: PatientRecord = Field(default_factory=PatientRecord) + tumor: TumorRecord = Field(default_factory=TumorRecord) From e7ea8edfdbe778272c85b7e9457a0df81f137167 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 9 Jul 2025 12:15:08 +0200 Subject: [PATCH 29/78] test: ensure basic functionality of schemas --- pyproject.toml | 4 +- tests/test_schema.py | 106 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 tests/test_schema.py diff --git a/pyproject.toml b/pyproject.toml index e79e7ca..7d38443 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,9 +69,7 @@ select = ["E", "F", "W", "B", "C", "R", "U", "D", "I", "S", "T", "A", "N"] ignore = ["B028", "N816", "E712"] [tool.ruff.lint.per-file-ignores] -"tests/*" = [ - "S101", -] +"tests/*" = ["S101"] [tool.uv] package = true diff --git a/tests/test_schema.py b/tests/test_schema.py new file mode 100644 index 0000000..daad8cc --- /dev/null +++ b/tests/test_schema.py @@ -0,0 +1,106 @@ +"""Check the pydantic schema for the lyDATA format works.""" + +import datetime +from typing import Any + +import pytest + +from lydata.schema import ( + CompleteRecord, + PatientInfo, + PatientRecord, + TumorInfo, + TumorRecord, +) + + +@pytest.fixture +def patient_info_dict() -> dict[str, Any]: + """Fixture for a sample patient info.""" + return { + "id": "12345", + "institution": "Test Hospital", + "sex": "female", + "age": 42, + "diagnose_date": "2023-01-01", + "alcohol_abuse": False, + "nicotine_abuse": True, + "pack_years": 10.0, + "hpv_status": True, + "neck_dissection": True, + "tnm_edition": 8, + "n_stage": 1, + "m_stage": 0, + } + + +@pytest.fixture +def tumor_info_dict() -> dict[str, Any]: + """Fixture for a sample tumor info.""" + return { + "location": "gums", + "subsite": "C03.9", + "central": False, + "extension": True, + "stage_prefix": "c", + "t_stage": 2, + } + + +def test_patient_info(patient_info_dict: dict[str, Any]) -> None: + """Test the PatientInfo schema.""" + patient_info = PatientInfo(**patient_info_dict) + + for key, dict_value in patient_info_dict.items(): + model_value = getattr(patient_info, key) + if isinstance(model_value, datetime.date): + model_value = model_value.isoformat() + assert model_value == dict_value, f"Mismatch for {key}" + + +def test_tumor_info(tumor_info_dict: dict[str, Any]) -> None: + """Test the TumorInfo schema.""" + tumor_info = TumorInfo(**tumor_info_dict) + + for key, value in tumor_info_dict.items(): + assert getattr(tumor_info, key) == value, f"Mismatch for {key}" + + +@pytest.fixture +def patient_info(patient_info_dict: dict[str, Any]) -> PatientInfo: + """Fixture for a sample PatientInfo instance.""" + return PatientInfo(**patient_info_dict) + + +@pytest.fixture +def tumor_info(tumor_info_dict: dict[str, Any]) -> TumorInfo: + """Fixture for a sample TumorInfo instance.""" + return TumorInfo(**tumor_info_dict) + + +def test_patient_record(patient_info: PatientInfo) -> None: + """Test the PatientRecord schema.""" + record = PatientRecord(_=patient_info) + + assert record.info == patient_info, "PatientRecord info does not match PatientInfo" + + +def test_tumor_record(tumor_info: TumorInfo) -> None: + """Test the TumorRecord schema.""" + record = TumorRecord(_=tumor_info) + + assert record.info == tumor_info, "TumorRecord info does not match TumorInfo" + + +@pytest.fixture +def complete_record(patient_info: PatientInfo, tumor_info: TumorInfo) -> CompleteRecord: + """Fixture for a sample CompleteRecord instance.""" + return CompleteRecord( + patient=PatientRecord(_=patient_info), + tumor=TumorRecord(_=tumor_info), + ) + + +def test_complete_record(complete_record: CompleteRecord) -> None: + """Test the CompleteRecord schema.""" + assert complete_record.patient.info.id == "12345", "Patient ID does not match" From e84f19f39fdfd70115e769b19a04b3b0a029d998 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:38:54 +0200 Subject: [PATCH 30/78] feat: add schema for modalities --- src/lydata/schema.py | 108 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 10 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 1328d67..3938d32 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -4,10 +4,38 @@ Also, it may be used to create a HTML form to enter patient data. """ -from datetime import date -from typing import Literal - -from pydantic import BaseModel, Field +from __future__ import annotations + +from typing import Any, Literal + +import pandas as pd +from pydantic import ( + BaseModel, + Field, + PastDate, + create_model, + field_validator, + model_validator, +) + +_LNLS = [ + "I", + "Ia", + "Ib", + "II", + "IIa", + "IIb", + "III", + "IV", + "V", + "Va", + "Vb", + "VI", + "VII", + "VIII", + "IX", + "X", +] class PatientInfo(BaseModel): @@ -21,7 +49,7 @@ class PatientInfo(BaseModel): le=120, description="Age of the patient at the time of diagnosis in years.", ) - diagnose_date: date = Field(description="Date of diagnosis of the patient.") + diagnose_date: PastDate = Field(description="Date of diagnosis of the patient.") alcohol_abuse: bool = Field(description="Whether the patient abused alcohol.") nicotine_abuse: bool = Field(description="Whether the patient abused nicotine.") pack_years: float | None = Field( @@ -42,7 +70,7 @@ class PatientInfo(BaseModel): ) n_stage: int = Field( ge=0, - le=4, + le=3, description="N stage of the patient according to the TNM classification.", ) m_stage: int | None = Field( @@ -51,6 +79,20 @@ class PatientInfo(BaseModel): description="M stage of the patient according to the TNM classification.", ) + @field_validator("pack_years", "hpv_status", "m_stage", mode="before") + @classmethod + def nan_to_none(cls, value: Any) -> Any: + """Convert NaN values to None.""" + return None if pd.isna(value) else value + + @model_validator(mode="after") + def check_nicotine_and_pack_years(self) -> PatientInfo: + """Ensure that if nicotine abuse is False, pack_years is not > 0.""" + if not self.nicotine_abuse and ( + self.pack_years is not None and self.pack_years > 0 + ): + raise ValueError("If nicotine abuse is False, pack_years cannot be > 0.") + class PatientRecord(BaseModel): """A patient's record. @@ -69,7 +111,7 @@ class TumorInfo(BaseModel): description="ICD-O-3 subsite of the primary tumor.", pattern=r"C[0-9]{2}(\.[0-9X])?", ) - central: bool = Field( + central: bool | None = Field( description="Whether the tumor is located on the mid-sagittal line.", default=False, ) @@ -92,6 +134,12 @@ class TumorInfo(BaseModel): description="T stage of the tumor according to the TNM classification.", ) + @field_validator("central", "volume", mode="before") + @classmethod + def nan_to_none(cls, value: Any) -> Any: + """Convert NaN values to None.""" + return None if pd.isna(value) else value + class TumorRecord(BaseModel): """A tumor record of a patient. @@ -102,10 +150,50 @@ class TumorRecord(BaseModel): info: TumorInfo = Field(default_factory=TumorInfo, alias="_") -class CompleteRecord(BaseModel): - """A complete patient record. +def create_lnl_field(lnl: str) -> tuple[str, tuple[bool | None, Field]]: + """Create a field for a specific lymph node level.""" + return ( + f"ln_{lnl.lower()}", + (bool | None, Field(default=None, description=f"LN {lnl} involvement")), + ) + + +class ModalityInfo(BaseModel): + """Basic info about a diagnostic/pathological modality. + + Contains only the date of the modality as of now. + """ + + date: PastDate | None = Field( + description="Date of the diagnostic or pathological modality.", + default=None, + ) + + +UnilateralInvolvementInfo = create_model( + "UnilateralInvolvementInfo", + **{lnl: create_lnl_field(lnl) for lnl in _LNLS}, +) + +class ModalityRecord(BaseModel): + """A record of the involvement patterns of a diagnostic or pathological modality.""" + + info: ModalityInfo = Field(default_factory=ModalityInfo) + ipsi: UnilateralInvolvementInfo = Field( + description="Unilateral involvement of the ipsilateral side.", + default_factory=UnilateralInvolvementInfo, + ) + contra: UnilateralInvolvementInfo = Field( + description="Unilateral involvement of the contralateral side.", + default_factory=UnilateralInvolvementInfo, + ) + + +class BaseRecord(BaseModel): + """A basic record of a patient. - This combines the patient and tumor records. + Contains at least the patient and tumor information in the same nested form + as the data represents it. """ patient: PatientRecord = Field(default_factory=PatientRecord) From 65fde0a823dac9798d4a9eede76302fa8e2760a3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:40:02 +0200 Subject: [PATCH 31/78] change!: rewrite validation using new schema --- src/lydata/validator.py | 316 ++++++---------------------------------- tests/test_schema.py | 8 +- 2 files changed, 52 insertions(+), 272 deletions(-) diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 8ad5c9f..03d2816 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -16,162 +16,16 @@ .. _LyProX: https://lyprox.org """ +import sys from typing import Any import pandas as pd from loguru import logger -from pandera import Check, Column, DataFrameSchema -from pandera.errors import SchemaError - -from lydata.loader import available_datasets - -_NULLABLE_OPTIONAL = {"required": False, "nullable": True} -_NULLABLE_OPTIONAL_BOOLEAN_COLUMN = Column( - dtype="boolean", - coerce=True, - **_NULLABLE_OPTIONAL, -) -_DATE_CHECK = Check.str_matches(r"^\d{4}-\d{2}-\d{2}$") -_LNLS = [ - "I", - "Ia", - "Ib", - "II", - "IIa", - "IIb", - "III", - "IV", - "V", - "Va", - "Vb", - "VI", - "VII", - "VIII", - "IX", - "X", -] - - -class ParsingError(Exception): - """Error while parsing the CSV file.""" - - -patient_columns = { - ("patient", "core", "institution"): Column(str), - ("patient", "core", "sex"): Column(str, Check.str_matches(r"^(male|female)$")), - ("patient", "core", "age"): Column(int), - ("patient", "core", "weight"): Column( - float, Check.greater_than(0), **_NULLABLE_OPTIONAL - ), - ("patient", "core", "diagnose_date"): Column(str, _DATE_CHECK), - ("patient", "core", "alcohol_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "core", "nicotine_abuse"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "core", "hpv_status"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "core", "neck_dissection"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("patient", "core", "tnm_edition"): Column(int, Check.in_range(7, 8)), - ("patient", "core", "n_stage"): Column(int, Check.in_range(0, 3)), - ("patient", "core", "m_stage"): Column(int, Check.in_range(-1, 1)), -} - -tumor_columns = { - ("tumor", "core", "subsite"): Column(str, Check.str_matches(r"^C\d{2}(\.\d)?$")), - ("tumor", "core", "t_stage"): Column(int, Check.in_range(0, 4)), - ("tumor", "core", "stage_prefix"): Column(str, Check.str_matches(r"^(p|c)$")), - ("tumor", "core", "volume"): Column( - float, Check.greater_than(0), **_NULLABLE_OPTIONAL - ), - ("tumor", "core", "central"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, - ("tumor", "core", "extension"): _NULLABLE_OPTIONAL_BOOLEAN_COLUMN, -} - - -def get_modality_columns( - modality: str, - lnls: list[str] = _LNLS, -) -> dict[tuple[str, str, str], Column]: - """Get the validation columns for a given modality.""" - cols = {(modality, "core", "date"): Column(str, _DATE_CHECK, **_NULLABLE_OPTIONAL)} - - for side in ["ipsi", "contra"]: - for lnl in lnls: - cols[(modality, side, lnl)] = _NULLABLE_OPTIONAL_BOOLEAN_COLUMN - - return cols - - -def construct_schema( - modalities: list[str], - lnls: list[str] = _LNLS, -) -> DataFrameSchema: - """Construct a :py:class:`pandera.DataFrameSchema` for the lydata datasets.""" - schema = DataFrameSchema(patient_columns).add_columns(tumor_columns) - - for modality in modalities: - schema = schema.add_columns(get_modality_columns(modality, lnls)) - - return schema - - -def validate_datasets( - year: int | str = "*", - institution: str = "*", - subsite: str = "*", - use_github: bool = True, - repo: str = "lycosystem/lydata", - ref: str = "main", - **kwargs, -) -> None: - """Validate all lydata datasets. - - The arguments of this function are directly passed to the - :py:func:`available_datasets` function to determine which datasets to validate. - - Keyword arguments beyond the ones that :py:func:`available_datasets` accepts are - passed to the :py:meth:`~lydata.loader.Dataset.load` method of the - :py:class:`~lydata.loader.Dataset` instances. - """ - lydata_schema = construct_schema( - modalities=["pathology", "diagnostic_consensus", "PET", "CT", "FNA", "MRI"], - ) - - for dataset in available_datasets( - year=year, - institution=institution, - subsite=subsite, - use_github=use_github, - repo_name=repo, - ref=ref, - ): - dataframe = dataset.get_dataframe(**kwargs) - try: - lydata_schema.validate(dataframe) - logger.info(f"Schema validation passed for {dataframe!r}.") - except SchemaError as schema_err: - message = f"Schema validation failed for {dataframe!r}." - logger.error(message, exc_info=schema_err) - raise Exception(message) from schema_err - - -def delete_private_keys(nested: dict) -> dict: - """Delete private keys from a nested dictionary. - - A 'private' key is a key whose name starts with an underscore. For example: - - >>> delete_private_keys({"patient": {"__doc__": "some patient info", "age": 61}}) - {'patient': {'age': 61}} - >>> delete_private_keys({"patient": {"age": 61}}) - {'patient': {'age': 61}} - """ - cleaned = {} +from pydantic import Field, create_model - if isinstance(nested, dict): - for key, value in nested.items(): - if not (isinstance(key, str) and key.startswith("_")): - cleaned[key] = delete_private_keys(value) - else: - cleaned = nested - - return cleaned +from lydata import loader +from lydata.schema import BaseRecord, ModalityRecord +from lydata.utils import get_default_modalities def flatten( @@ -226,131 +80,57 @@ def unflatten(flat: dict) -> dict: return result -def get_depth( - nested_map: dict, - leaf_keys: set | None = None, -) -> int: - """Get the depth at which 'leaf' dicts sit in a nested dictionary. - - A leaf is a dictionary that contains any of the ``leaf_keys``. The default is - ``{"func", "default"}``. - - >>> nested_column_map = {"patient": {"age": {"func": int}}} - >>> get_depth(nested_column_map) - 2 - >>> flat_column_map = flatten(nested_column_map, max_depth=2) - >>> get_depth(flat_column_map) - 1 - >>> nested_column_map = {"patient": {"__doc__": "some patient info", "age": 61}} - >>> get_depth(nested_column_map) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Leaf of nested map must be dict with any of ['default', 'func']. - """ - leaf_keys = leaf_keys or {"func", "default"} - - for _, value in nested_map.items(): - if not isinstance(value, dict): - raise ValueError( - f"Leaf of nested map must be dict with any of {sorted(leaf_keys)}." - ) - - is_leaf = not set(value.keys()).isdisjoint(leaf_keys) - return 1 if is_leaf else 1 + get_depth(value, leaf_keys) - - raise ValueError("Empty `nested_map`.") - - -def transform_to_lyprox( - raw: pd.DataFrame, - column_map: dict[str | tuple, dict | Any], -) -> pd.DataFrame: - """Transform ``raw`` data into table that can be uploaded directly to `LyProX`_. - - To do so, it uses instructions in the ``colum_map`` dictionary, that needs to have - a particular structure: - - For each column in the final 'lyproxified' :py:class:`pd.DataFrame`, one entry must - exist in the ``column_map`` dictionary. E.g., for the column corresponding to a - patient's age, the dictionary should contain a key-value pair of this shape: - - .. code-block:: python - - column_map = { - ("patient", "core", "age"): { - "func": compute_age_from_raw, - "kwargs": {"randomize": False}, - "columns": ["birthday", "date of diagnosis"] - }, - } - - In this example, the function ``compute_age_from_raw`` is called with the - values of the columns ``"birthday"`` and ``"date of diagnosis"`` as positional - arguments, and the keyword argument ``"randomize"`` is set to ``False``. The - function then returns the patient's age, which is subsequently stored in the column - ``("patient", "core", "age")``. - - Alternatively, this dictionary can also have a nested, tree-like structure, like - this: - - .. code-block:: python - - column_map = { - "patient": { - "core": { - "age": { - "func": compute_age_from_raw, - "kwargs": {"randomize": False}, - "columns": ["birthday", "date of diagnosis"] - } - } - } - } - - In this case it is imortant that all the leaf nodes, which are defined by having - either a ``"func"`` or a ``"default"`` key, are at the same depth. Because this - nested dictionary is flattened to look like the first example above. - - .. _LyProX: https://lyprox.org - """ - column_map = delete_private_keys(column_map) - instruction_depth = get_depth(column_map) +def move_value(mapping: dict[str, Any], from_key: str, to_key: str) -> None: + """Move a key in a dictionary to another key.""" + if from_key not in mapping: + raise KeyError(f"Key '{from_key}' not found in mapping.") - if instruction_depth > 1: - column_map = flatten(column_map, max_depth=instruction_depth) + mapping[to_key] = mapping.pop(from_key) - multi_idx = pd.MultiIndex.from_tuples(column_map.keys()) - processed = pd.DataFrame(columns=multi_idx) - for multi_idx_col, instruction in column_map.items(): - if instruction == "": - continue +def create_modality_field(modality: str) -> tuple[type, Field]: + """Create a field for a specific modality.""" + return ( + ModalityRecord, + Field( + default_factory=ModalityRecord, + description=f"Involvement data for modality {modality}", + ), + ) - if "default" in instruction: - processed[multi_idx_col] = [instruction["default"]] * len(raw) - elif "func" in instruction: - cols = instruction.get("columns", []) - kwargs = instruction.get("kwargs", {}) - func = instruction["func"] +def validate(dataset: pd.DataFrame) -> bool: + """Validate the given dataset against the lyDATA schema.""" + top_lvl_cols = set(dataset.columns.get_level_values(0).unique()) + top_lvl_cols -= {"patient", "tumor"} - try: - processed[multi_idx_col] = [ - func(*vals, **kwargs) for vals in raw[cols].values - ] - except Exception as exc: - raise ParsingError( - f"Exception encountered while parsing column {multi_idx_col}" - ) from exc + modality_cols = set() + for col in top_lvl_cols: + if col in get_default_modalities(): + modality_cols.add(col) - else: - raise ParsingError( - f"Column {multi_idx_col} has neither a `default` value nor `func` " - "describing how to fill this column." - ) + FullRecord = create_model( # noqa: N806 + "FullRecord", + __base__=BaseRecord, + **{col: create_modality_field(col) for col in modality_cols}, + ) + + for i, row in dataset.iterrows(): + record = unflatten(row.to_dict()) + + move_value(record["patient"], from_key="#", to_key="_") + move_value(record["tumor"], from_key="1", to_key="_") + + with logger.catch(message=f"Validation error for patient {i}"): + validated_record = FullRecord(**record) + logger.debug(f"Patient {i} is valid: {validated_record}") - return processed + return True if __name__ == "__main__": - validate_datasets() + logger.enable("lydata") + logger.remove() + logger.add(sys.stderr, level="INFO") + dataset = next(loader.load_datasets()) + validate(dataset) diff --git a/tests/test_schema.py b/tests/test_schema.py index daad8cc..23b4f5f 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -6,7 +6,7 @@ import pytest from lydata.schema import ( - CompleteRecord, + BaseRecord, PatientInfo, PatientRecord, TumorInfo, @@ -93,14 +93,14 @@ def test_tumor_record(tumor_info: TumorInfo) -> None: @pytest.fixture -def complete_record(patient_info: PatientInfo, tumor_info: TumorInfo) -> CompleteRecord: +def complete_record(patient_info: PatientInfo, tumor_info: TumorInfo) -> BaseRecord: """Fixture for a sample CompleteRecord instance.""" - return CompleteRecord( + return BaseRecord( patient=PatientRecord(_=patient_info), tumor=TumorRecord(_=tumor_info), ) -def test_complete_record(complete_record: CompleteRecord) -> None: +def test_complete_record(complete_record: BaseRecord) -> None: """Test the CompleteRecord schema.""" assert complete_record.patient.info.id == "12345", "Patient ID does not match" From 9d8430c83388dcbeab88ff94a33a55b238c676c7 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:01:18 +0200 Subject: [PATCH 32/78] test: check another wrong patient --- tests/test_augmentor.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index 7fa0434..4e2f8e7 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -97,3 +97,24 @@ def test_usz_patient_usz0079() -> None: assert enhanced.iloc[0].max_llh.ipsi.II == True assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIa) assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIb) + + +def test_2025_usz_311() -> None: + """Check that this patient...""" + usz_raw = next( + lydata.load_datasets( + year=2025, + institution="usz", + use_github=True, + repo_name="lycosystem/lydata.private", + ref="4b519c6a23e9eda00fad7a1e9dedae42b161754d", + ), + ) + idx = usz_raw.ly.id == "2025-USZ-311" + patient = usz_raw.loc[idx] + assert len(patient) == 1 + assert patient.ly.date.iloc[0] == "2013-06-03" + + enhanced = patient.ly.enhance() + assert len(enhanced) == 1 + assert enhanced.iloc[0].max_llh.ipsi.II == False From 524eb4645ddd0719df1a22d4fc4956e4236b6976 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:02:23 +0200 Subject: [PATCH 33/78] fix: augment during combine for max_llh/rank We cannot do the combine and augment step separately for the max_llh/rank modalities. Because by doing it separately, we discard the involvement probabilities. --- src/lydata/accessor.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index e1584aa..cfb23e5 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -360,6 +360,7 @@ def combine( self, modalities: dict[str, ModalityConfig] | None = None, method: Literal["max_llh", "rank"] = "max_llh", + subdivisions: Mapping[str, Sequence[str]] | None = None, ) -> pd.DataFrame: """Combine diagnoses of ``modalities`` using ``method``. @@ -406,7 +407,7 @@ def combine( specificities=[mod.spec for mod in modalities.values()], sensitivities=[mod.sens for mod in modalities.values()], method=method, - subdivisions={}, + subdivisions=subdivisions, ) def augment( @@ -466,12 +467,19 @@ def enhance( if modalities is None: modalities = get_default_modalities() - combined = self.combine(modalities=modalities, method=method) + # Originally, I thought we could just combine and not augment the super- and + # sub-levels, but then we discard the involvement probability information from + # the original modalities. + combined = self.combine( + modalities=modalities, + method=method, + subdivisions=subdivisions, + ) combined = pd.concat({method: combined}, axis="columns") combined.index = self._obj.index enhanced: LyDataFrame = pd.concat([self._obj, combined], axis="columns") - for modality in list(modalities.keys()) + [method]: + for modality in list(modalities.keys()): if modality not in enhanced.columns: continue From eb99daf6cd65d93879cfa3552923f25c0a9c29bf Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:17:56 +0200 Subject: [PATCH 34/78] test: rerun comparison --- scripts/new.pretty.csv | 442 ++++++++++++++++++++--------------------- scripts/new.py | 2 +- scripts/old.pretty.csv | 442 ++++++++++++++++++++--------------------- 3 files changed, 441 insertions(+), 445 deletions(-) diff --git a/scripts/new.pretty.csv b/scripts/new.pretty.csv index d3ee300..d52e52c 100644 --- a/scripts/new.pretty.csv +++ b/scripts/new.pretty.csv @@ -1,222 +1,220 @@ ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- -patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives -# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi -id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI -P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 -P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 -P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 -P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 -P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 -P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 -P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 -P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 -P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 -P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 -P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 -P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 -P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 -P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 -P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 -P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 -P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 -P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 -P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 -P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 -P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 -P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 -P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 -P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 -P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 -P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 -P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False True False False False False False False True False False True False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 -P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 -P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 -P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 -P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 -P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 -P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 -P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 -P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 -P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 -P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 -P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 -P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 -P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 -P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 -P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True True False True True True False True False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 -P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 -P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 -8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True -12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True -21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False -29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 -33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False -61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False -89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False -132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True -154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False -157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False -278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False -CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 -CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 -CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 -CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 -CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 -CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 -CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 -CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 -CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 -CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 -CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 -CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 -CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 -CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 -CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 -CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 -CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 -CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 -CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 -CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 -CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 -CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 -CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 -CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 -CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 -CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 -CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 -CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 -CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 -CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 -CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 -CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 -CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 -CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 -CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 -CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 -CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 -CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 -CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 -CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 -CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 -CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 -CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 -CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 -CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 -CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 -CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 -CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 -CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 -CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 -CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 -CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 -CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 -CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 -CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 -CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 -CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 -CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 -CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 -CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 -CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 -CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 -CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 -CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 -CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 -CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 -CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 -CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 -CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 -CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 -CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 -CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 -CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 -CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 -CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 -CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 -CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 -CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 -CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 -CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 -CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 -CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False False True True False False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 -CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False False True False False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 -CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 -CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 -CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 -CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 -CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 -CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 -CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 -CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 -CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 -CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 -CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 -CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 -CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 -CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 -CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 -CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 -CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 -CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 -CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 -CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 -CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 -CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 -CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 -CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 -CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 -CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 -CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 -CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 -CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 -CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 -CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 -CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 -CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 -BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 -BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 -BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 -BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 -BE578 64 False 2014-05-14 False True Inselspital Bern 0 1 True False male 7 central True True larynx c C32.1 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False 2014-10-05 False False False True True True True True False False False False False False False False False False False False False False 2014-05-21 False False False True True False False False False False False 6a 6a 45b 45b 45b 45b 1b 1b 1b 1b False False False False False False False False False 2014-03-06 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2014-03-06 c-IIa&c-III 20.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36.0 13.0 7.0 6.0 23.0 4.0 5.0 115.0 2014-03-06 1.0 9.0 1.0 8.0 1.0 9.0 4.0 5.0 -BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 -BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 -BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 -BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 -BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 -BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 -62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False -75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True -117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False True True False True False True True 2015-02-26 False False False True True False True False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False -123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False -157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False -UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 -UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True True False True False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 -UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 -UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 -UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 -UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 -UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 -UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 -UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 -UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 -UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 -UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 -UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 -UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 -UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 -USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False -USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False -USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False -USZ0079 70 False 2016-04-05 False University Hospital Zurich 0 2 True True male 7 left False True larynx p C32.9 4 False False False True False False False False False False False False False False True False False False False False False False 2016-04-05 False False False False False False False False True True False False False False False False False False 2016-03-29 False False False True True False False False False False False False False False False False False False False False False False False False False False 2016-11-07 False False False False False False False False False False False False False False False False False False False 2016-04-29 -USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True True False False False False False False False False False True True False True False True False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False -USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False -USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False -USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False -USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False -USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False -USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False -USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 -USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False -USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False -USZ0310 57 True 2013-06-03 False University Hospital Zurich 0 0 True True female 8 right False True hypopharynx p C13.0 4 False False False False False False False False False False False False False False False False True False False False False False False False 2013-06-13 False False False False False False False False False False False False False False 2013-06-13 False False False True True False False False False False False False False 2013-07-25 False False False False False ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives +# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi +id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI +P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 +P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 +P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 +P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 +P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 +P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 +P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 +P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 +P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 +P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 +P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 +P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 +P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 +P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 +P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 +P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 +P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 +P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 +P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 +P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 +P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 +P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 +P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 +P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 +P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 +P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 +P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False True False False False False False False True False False True False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 +P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 +P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 +P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 +P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 +P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 +P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 +P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 +P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 +P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 +P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 +P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 +P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 +P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 +P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 +P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True True False True True True False True False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 +P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 +P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 +8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True +12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True +21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False +29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 +33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False +61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False +89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False False False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False +132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True +154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False +157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False +278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False +CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 +CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 +CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 +CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 +CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 +CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 +CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 +CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 +CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 +CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 +CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 +CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 +CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 +CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 +CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 +CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 +CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 +CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 +CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 +CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 +CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 +CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 +CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 +CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 +CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 +CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 +CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 +CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 +CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 +CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 +CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 +CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 +CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 +CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 +CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 +CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 +CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 +CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 +CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 +CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 +CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 +CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 +CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 +CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 +CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 +CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 +CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 +CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 +CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 +CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 +CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 +CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 +CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 +CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 +CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 +CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 +CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 +CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 +CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 +CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 +CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 +CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 +CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 +CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 +CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 +CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 +CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 +CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 +CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 +CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 +CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 +CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 +CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 +CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 +CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 +CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 +CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 +CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 +CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 +CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 +CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 +CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False False True True False False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 +CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False False True False False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 +CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 +CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 +CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 +CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 +CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 +CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 +CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 +CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 +CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 +CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 +CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 +CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 +CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 +CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 +CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 +CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 +CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 +CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 +CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 +CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 +CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 +CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 +CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 +CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 +CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 +CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 +CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 +CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 +CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 +CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 +CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 +CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 +CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 +BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 +BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 +BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 +BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 +BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 +BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 +BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 +BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 +BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 +BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 +62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False +75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True +117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False True True False True False True True 2015-02-26 False False False True True False True False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False +123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False +134 72 False 2019-11-26 False Vall d'Hebron Barcelona Hospital 1 3 False True female 8 True True oropharynx C C01.9 4 52.0 False False False True True False False False True True False False False False False True True True True False True True False True False False False False False False False False False False False False 2019-12-18 False False False True True True True False True True False True False False False True True False False False True True False False 2019-12-27 True False True True True True True False True True False True +157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False +UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 +UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True True False True False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 +UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 +UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 +UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 +UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 +UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 +UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 +UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 +UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 +UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 +UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 +UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 +UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 +UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 +USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False +USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False +USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False False False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False +USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False False False False True False False False False False False False False False True True False True False True False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False +USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 False False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False +USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False +USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False +USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False +USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False +USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False +USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 +USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False +USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- diff --git a/scripts/new.py b/scripts/new.py index a40062e..25031c5 100644 --- a/scripts/new.py +++ b/scripts/new.py @@ -1,7 +1,7 @@ # /// script # requires-python = ">=3.10" # dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@01a62ec12d504365bfd51302526cccc371bfd0ce", +# "lydata @ git+https://github.com/lycosystem/lydata-package@524eb4645ddd0719df1a22d4fc4956e4236b6976", # ] # /// diff --git a/scripts/old.pretty.csv b/scripts/old.pretty.csv index cd1f050..65873f5 100644 --- a/scripts/old.pretty.csv +++ b/scripts/old.pretty.csv @@ -1,222 +1,220 @@ ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- -patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives -# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi -id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI -P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 -P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 -P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 -P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 -P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 -P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 -P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True False False True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 -P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 -P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 -P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 -P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 -P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False True False False True False False False False True False False False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 -P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 -P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 -P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 -P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 -P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 -P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 -P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 -P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 -P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 -P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 -P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 -P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 -P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 -P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 -P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False False False True False False False False False False True False False True False False False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 -P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 -P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 -P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 -P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 -P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 -P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 -P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 -P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 -P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 -P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 -P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False True False False True False False False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 -P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 -P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 -P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 -P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True False False True False True True True False True False False False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 -P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 -P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 -8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True False False True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True -12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True -21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False -29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 -33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False -61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True False False True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False -89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False -132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True False False True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True -154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False False False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False -157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False -278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False False False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False -CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 -CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 -CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 -CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 -CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 -CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 -CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 -CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 -CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 -CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 -CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 -CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 -CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 -CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 -CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 -CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 -CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 -CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 -CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 -CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 -CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 -CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 -CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 -CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 -CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 -CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 -CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 -CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 -CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 -CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 -CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 -CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 -CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 -CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 -CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 -CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 -CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 -CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 -CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 -CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 -CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 -CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 -CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 -CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 -CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 -CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 -CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 -CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 -CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 -CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 -CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 -CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 -CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 -CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 -CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 -CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 -CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 -CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 -CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 -CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 -CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 -CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 -CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 -CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 -CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 -CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 -CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 -CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 -CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 -CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 -CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 -CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 -CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 -CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 -CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 -CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 -CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 -CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 -CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 -CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 -CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 -CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False True True False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 -CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False True False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 -CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 -CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 -CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 -CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 -CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 -CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 -CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 -CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 -CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 -CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 -CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 -CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 -CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 -CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 -CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 -CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 -CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 -CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 -CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 -CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 -CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 -CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 -CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 -CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 -CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 -CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 -CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 -CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 -CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 -CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 -CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 -CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 -CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 -BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 -BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 True False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 -BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 -BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 -BE578 64 False 2014-05-14 False True Inselspital Bern 0 1 True False male 7 central True True larynx c C32.1 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-10-05 False False False True True True True True False False False False False False False False False False False False False False 2014-05-21 False False False True True False False False False False False 6a 6a 45b 45b 45b 45b 1b 1b 1b 1b False False False False False False False False False 2014-03-06 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2014-03-06 c-IIa&c-III 20.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36.0 13.0 7.0 6.0 23.0 4.0 5.0 115.0 2014-03-06 1.0 9.0 1.0 8.0 1.0 9.0 4.0 5.0 -BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True False False True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 -BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 -BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 -BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 -BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 -BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 -62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False -75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True False False True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True -117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False False False False True False True False True True 2015-02-26 False False False True True False False False False False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False -123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False -157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False -UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 -UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True True False True False False False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 -UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 -UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 -UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 -UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 -UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 -UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 -UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 -UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 -UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True False False True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 -UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 -UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 -UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 -UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 -USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False -USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False -USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False -USZ0079 70 False 2016-04-05 False University Hospital Zurich 0 2 True True male 7 left False True larynx p C32.9 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-04-05 False False False False False False False False True True False False False False False False False False 2016-03-29 False False False True True False False False False False False False False False False False False False False False False False False False False False 2016-11-07 False False False False False False False False False False False False False False False False False False False 2016-04-29 -USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True False False True False False False False False False False False False True True False True False True False False False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False -USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False -USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False -USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False -USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False -USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False -USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False -USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 -USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False -USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True False False True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False -USZ0310 57 True 2013-06-03 False University Hospital Zurich 0 0 True True female 8 right False True hypopharynx p C13.0 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-13 False False False False False False False False False False False False False False 2013-06-13 False False False True True False False False False False False False False 2013-07-25 False False False False False ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- +patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives +# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi +id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI +P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 +P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 +P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 +P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 +P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 +P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 +P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True False False True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 +P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 +P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 +P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 +P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 +P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False True False False True False False False False True False False False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 +P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 +P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 +P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 +P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 +P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 +P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 +P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 +P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 +P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 +P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 +P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 +P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 +P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 +P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 +P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False False False True False False False False False False True False False True False False False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 +P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 +P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 +P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 +P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 +P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 +P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 +P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 +P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 +P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 +P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 +P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False True False False True False False False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 +P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 +P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 +P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 +P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True False False True False True True True False True False False False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 +P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 +P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 +8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True False False True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True +12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True +21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False +29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 +33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False +61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True False False True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False +89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False +132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True False False True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True +154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False False False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False +157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False +278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False False False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False +CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 +CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 +CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 +CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 +CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 +CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 +CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 +CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 +CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 +CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 +CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 +CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 +CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 +CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 +CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 +CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 +CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 +CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 +CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 +CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 +CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 +CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 +CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 +CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 +CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 +CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 +CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 +CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 +CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 +CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 +CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 +CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 +CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 +CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 +CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 +CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 +CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 +CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 +CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 +CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 +CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 +CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 +CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 +CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 +CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 +CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 +CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 +CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 +CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 +CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 +CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 +CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 +CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 +CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 +CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 +CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 +CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 +CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 +CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 +CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 +CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 +CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 +CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 +CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 +CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 +CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 +CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 +CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 +CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 +CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 +CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 +CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 +CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 +CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 +CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 +CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 +CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 +CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 +CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 +CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 +CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 +CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False True True False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 +CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False True False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 +CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 +CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 +CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 +CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 +CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 +CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 +CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 +CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 +CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 +CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 +CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 +CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 +CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 +CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 +CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 +CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 +CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 +CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 +CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 +CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 +CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 +CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 +CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 +CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 +CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 +CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 +CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 +CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 +CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 +CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 +CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 +CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 +CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 +BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 +BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 True False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 +BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 +BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 +BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True False False True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 +BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 +BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 +BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 +BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 +BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 +62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False +75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True False False True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True +117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False False False False True False True False True True 2015-02-26 False False False True True False False False False False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False +123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False +134 72 False 2019-11-26 False Vall d'Hebron Barcelona Hospital 1 3 False True female 8 True True oropharynx C C01.9 4 52.0 False False False True True False False False True True False False True False True True True True True False True True False True False False False False False False False False False False False False 2019-12-18 False False False True True True True False True True False True False False False True True False False False True True False False 2019-12-27 True False True True True True True False True True False True +157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False +UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 +UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True True False True False False False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 +UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 +UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 +UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 +UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 +UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 +UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 +UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 +UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 +UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True False False True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 +UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 +UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 +UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 +UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 +USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False +USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False +USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False +USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True False False True False False False False False False False False False True True False True False True False False False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False +USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False +USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False +USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False +USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False +USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False +USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False +USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 +USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False +USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True False False True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False +--------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- From 631c34780ba816e044420ab5ae921302804496ff Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:29:00 +0200 Subject: [PATCH 35/78] change!: start using only schema for validation --- src/lydata/__init__.py | 4 +-- src/lydata/schema.py | 18 +++++----- src/lydata/validator.py | 73 ++++++++++++++++++++++++++++++----------- 3 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/lydata/__init__.py b/src/lydata/__init__.py index 462a164..049cb05 100644 --- a/src/lydata/__init__.py +++ b/src/lydata/__init__.py @@ -9,7 +9,7 @@ load_datasets, ) from lydata.querier import C, Q -from lydata.validator import validate_datasets +from lydata.validator import validate __author__ = "Roman Ludwig" __email__ = "roman.ludwig@usz.ch" @@ -23,7 +23,7 @@ "C", "available_datasets", "load_datasets", - "validate_datasets", + "validate", ] logger.disable("lydata") diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 3938d32..2419c8a 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -6,11 +6,12 @@ from __future__ import annotations -from typing import Any, Literal +from typing import Annotated, Any, Literal import pandas as pd from pydantic import ( BaseModel, + BeforeValidator, Field, PastDate, create_model, @@ -68,7 +69,7 @@ class PatientInfo(BaseModel): default=8, description="Edition of the TNM classification used for staging.", ) - n_stage: int = Field( + n_stage: int | None = Field( ge=0, le=3, description="N stage of the patient according to the TNM classification.", @@ -100,7 +101,7 @@ class PatientRecord(BaseModel): As of now, this only contains the patient information. """ - info: PatientInfo = Field(default_factory=PatientInfo, alias="_") + info: PatientInfo = Field(default_factory=PatientInfo, alias="core") class TumorInfo(BaseModel): @@ -128,7 +129,7 @@ class TumorInfo(BaseModel): default="c", description="Prefix for the tumor stage, 'c' = clinical, 'p' = pathological.", ) - t_stage: int = Field( + t_stage: int | None = Field( ge=0, le=4, description="T stage of the tumor according to the TNM classification.", @@ -147,14 +148,14 @@ class TumorRecord(BaseModel): As of now, this only contains the tumor information. """ - info: TumorInfo = Field(default_factory=TumorInfo, alias="_") + info: TumorInfo = Field(default_factory=TumorInfo, alias="core") -def create_lnl_field(lnl: str) -> tuple[str, tuple[bool | None, Field]]: +def create_lnl_field(lnl: str) -> tuple[type, Field]: """Create a field for a specific lymph node level.""" return ( - f"ln_{lnl.lower()}", - (bool | None, Field(default=None, description=f"LN {lnl} involvement")), + Annotated[bool | None, BeforeValidator(lambda v: None if pd.isna(v) else v)], + Field(default=None, description=f"LN {lnl} involvement"), ) @@ -175,6 +176,7 @@ class ModalityInfo(BaseModel): **{lnl: create_lnl_field(lnl) for lnl in _LNLS}, ) + class ModalityRecord(BaseModel): """A record of the involvement patterns of a diagnostic or pathological modality.""" diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 03d2816..8a94255 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -19,13 +19,12 @@ import sys from typing import Any -import pandas as pd from loguru import logger -from pydantic import Field, create_model +from pydantic import BaseModel, Field, create_model from lydata import loader +from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 from lydata.schema import BaseRecord, ModalityRecord -from lydata.utils import get_default_modalities def flatten( @@ -99,38 +98,74 @@ def create_modality_field(modality: str) -> tuple[type, Field]: ) -def validate(dataset: pd.DataFrame) -> bool: - """Validate the given dataset against the lyDATA schema.""" - top_lvl_cols = set(dataset.columns.get_level_values(0).unique()) - top_lvl_cols -= {"patient", "tumor"} - - modality_cols = set() - for col in top_lvl_cols: - if col in get_default_modalities(): - modality_cols.add(col) - - FullRecord = create_model( # noqa: N806 +def create_full_record_model(modalities: list[str]) -> type: + """Create a Pydantic model for a full record with all modalities.""" + return create_model( "FullRecord", __base__=BaseRecord, - **{col: create_modality_field(col) for col in modality_cols}, + **{mod: create_modality_field(mod) for mod in modalities}, ) + +def validate(dataset: LyDataFrame) -> bool: + """Validate the given dataset against the lyDATA schema.""" + modalities = dataset.ly.get_modalities() + FullRecord = create_full_record_model(modalities) # noqa: N806 + for i, row in dataset.iterrows(): record = unflatten(row.to_dict()) + patient_id = record["patient"]["core"]["id"] - move_value(record["patient"], from_key="#", to_key="_") - move_value(record["tumor"], from_key="1", to_key="_") + # move_value(record["patient"], from_key="#", to_key="core") + # move_value(record["tumor"], from_key="1", to_key="core") - with logger.catch(message=f"Validation error for patient {i}"): + with logger.catch(message=f"Validation error for {patient_id=}"): validated_record = FullRecord(**record) logger.debug(f"Patient {i} is valid: {validated_record}") return True +def get_field_annotations( + model: type[BaseModel], +) -> dict[str, Any]: + """Get the field annotations of a three-level nested Pydantic model. + + >>> class Foo(BaseModel): + ... bar: int = 3 + >>> class Baz(BaseModel): + ... foo: Foo = Field(default_factory=Foo) + >>> get_field_annotations(Baz) + {'foo': {'bar': }} + """ + annotations = {} + for field_name, field_info in model.model_fields.items(): + if issubclass(field_info.annotation, BaseModel): + annotations[field_name] = get_field_annotations(field_info.annotation) + elif isinstance(field_info.annotation, type): + annotations[field_name] = field_info.annotation + + return annotations + + +def cast_types(dataset: LyDataFrame) -> LyDataFrame: + """Cast the types of the dataset to the expected types.""" + modalities = dataset.ly.get_modalities() + FullRecord = create_full_record_model(modalities) # noqa: N806 + annotations = get_field_annotations(FullRecord) + annotations = flatten(annotations, max_depth=3) + ... + # TODO: Implement type casting logic based on annotations + + if __name__ == "__main__": logger.enable("lydata") logger.remove() logger.add(sys.stderr, level="INFO") - dataset = next(loader.load_datasets()) + dataset = next( + loader.load_datasets( + repo_name="lycosystem/lydata.private", + ref="4b519c6a23e9eda00fad7a1e9dedae42b161754d", + ) + ) validate(dataset) From 2dcc9401ab497176bb5799464f7278fcbfeb82ea Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:52:36 +0200 Subject: [PATCH 36/78] change: update midlvl cols to new `core` --- src/lydata/schema.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 2419c8a..881f653 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -42,7 +42,7 @@ class PatientInfo(BaseModel): """Basic required patient information.""" - id: str | int = Field(description="Unique but anonymized identifier for a patient.") + id: str = Field(description="Unique but anonymized identifier for a patient.") institution: str = Field(description="Hospital where the patient was treated.") sex: Literal["male", "female"] = Field(description="Biological sex of the patient.") age: int = Field( @@ -101,7 +101,7 @@ class PatientRecord(BaseModel): As of now, this only contains the patient information. """ - info: PatientInfo = Field(default_factory=PatientInfo, alias="core") + core: PatientInfo = Field(default_factory=PatientInfo, alias="core") class TumorInfo(BaseModel): @@ -148,7 +148,7 @@ class TumorRecord(BaseModel): As of now, this only contains the tumor information. """ - info: TumorInfo = Field(default_factory=TumorInfo, alias="core") + core: TumorInfo = Field(default_factory=TumorInfo, alias="core") def create_lnl_field(lnl: str) -> tuple[type, Field]: @@ -180,7 +180,7 @@ class ModalityInfo(BaseModel): class ModalityRecord(BaseModel): """A record of the involvement patterns of a diagnostic or pathological modality.""" - info: ModalityInfo = Field(default_factory=ModalityInfo) + core: ModalityInfo = Field(default_factory=ModalityInfo) ipsi: UnilateralInvolvementInfo = Field( description="Unilateral involvement of the ipsilateral side.", default_factory=UnilateralInvolvementInfo, From fa33dcd39ce138d4e2c3a1fdf873d9890849ed6f Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:52:50 +0200 Subject: [PATCH 37/78] feat: add working casting function --- src/lydata/validator.py | 70 +++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 8a94255..e60a831 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -17,10 +17,12 @@ """ import sys +from collections.abc import Mapping from typing import Any from loguru import logger -from pydantic import BaseModel, Field, create_model +from pandas import PeriodDtype +from pydantic import BaseModel, Field, PastDate, create_model from lydata import loader from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 @@ -142,30 +144,80 @@ def get_field_annotations( for field_name, field_info in model.model_fields.items(): if issubclass(field_info.annotation, BaseModel): annotations[field_name] = get_field_annotations(field_info.annotation) - elif isinstance(field_info.annotation, type): + else: annotations[field_name] = field_info.annotation return annotations -def cast_types(dataset: LyDataFrame) -> LyDataFrame: - """Cast the types of the dataset to the expected types.""" +def cast_types( + dataset: LyDataFrame, + casters: Mapping[type, str] | None = None, +) -> LyDataFrame: + """Cast the types of the ``dataset`` to the expected types. + + This function uses the annotations of the Pydantic schema to cast the individual + columns of the ``dataset`` to the expected types. It uses the ``casters`` mapping + to determine the type to cast to. By default, it uses the following mapping: + + .. code-block:: python + + { + int: int, + int | None: "Int64", + float: float, + float | None: "Float64", + str: "string", + str | None: "string", + bool: bool, + bool | None: "boolean", + PastDate: PeriodDtype("D"), + } + + That way, pandas uses e.g. the nullable integer type ``Int64`` if we specify in + pydantic that a field can be an integer or None. If you want to use a different + mapping, you can pass it as the ``casters`` argument. + """ + if casters is None: + casters = { + int: int, + int | None: "Int64", + float: float, + float | None: "Float64", + str: "string", + str | None: "string", + bool: bool, + bool | None: "boolean", + PastDate: PeriodDtype("D"), + PastDate | None: PeriodDtype("D"), + } + modalities = dataset.ly.get_modalities() FullRecord = create_full_record_model(modalities) # noqa: N806 annotations = get_field_annotations(FullRecord) annotations = flatten(annotations, max_depth=3) - ... - # TODO: Implement type casting logic based on annotations + dtypes = {} + + for col, annotation in annotations.items(): + if col not in dataset.columns: + continue + + dtypes[col] = casters.get(annotation, object) + + result = dataset.astype(dtypes) + logger.debug(f"Cast types: {dtypes}") + return result if __name__ == "__main__": logger.enable("lydata") logger.remove() - logger.add(sys.stderr, level="INFO") + logger.add(sys.stderr, level="DEBUG") dataset = next( loader.load_datasets( repo_name="lycosystem/lydata.private", - ref="4b519c6a23e9eda00fad7a1e9dedae42b161754d", + ref="6c56a630f307ffea12a2f071f18316f605beaa08", ) ) - validate(dataset) + dataset = cast_types(dataset) + # validate(dataset) From e1b76bf4588f14d21ff2bd9e92f45a0d697a6547 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:05:22 +0200 Subject: [PATCH 38/78] test: cover casting with minimal checks --- tests/test_validation.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/test_validation.py diff --git a/tests/test_validation.py b/tests/test_validation.py new file mode 100644 index 0000000..3958f69 --- /dev/null +++ b/tests/test_validation.py @@ -0,0 +1,24 @@ +"""Test the casting and validation of lydata datasets.""" + +from lydata import load_datasets +from lydata.validator import cast_types + + +def test_casting() -> None: + """Test the casting of a dataset.""" + clb_raw = next( + load_datasets( + year=2021, + institution="clb", + subsite="oropharynx", + use_github=True, + repo_name="lycosystem/lydata.private", + ref="6c56a630f307ffea12a2f071f18316f605beaa08", + ) + ) + clb_casted = cast_types(clb_raw) + + assert clb_casted.patient.core.id.dtype == "string" + assert clb_casted.patient.core.age.dtype == "int64" + assert clb_casted.patient.core.diagnose_date.dtype == "period[D]" + assert clb_casted.tumor.core.t_stage.dtype == "Int64" From 736934afb043fa9c64db41132579ca6fa660955c Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:14:43 +0200 Subject: [PATCH 39/78] test: update schema test to use `core`, too --- tests/test_schema.py | 46 ++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 23b4f5f..6c1b671 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -15,7 +15,7 @@ @pytest.fixture -def patient_info_dict() -> dict[str, Any]: +def patient_core_dict() -> dict[str, Any]: """Fixture for a sample patient info.""" return { "id": "12345", @@ -35,7 +35,7 @@ def patient_info_dict() -> dict[str, Any]: @pytest.fixture -def tumor_info_dict() -> dict[str, Any]: +def tumor_core_dict() -> dict[str, Any]: """Fixture for a sample tumor info.""" return { "location": "gums", @@ -47,60 +47,60 @@ def tumor_info_dict() -> dict[str, Any]: } -def test_patient_info(patient_info_dict: dict[str, Any]) -> None: +def test_patient_core(patient_core_dict: dict[str, Any]) -> None: """Test the PatientInfo schema.""" - patient_info = PatientInfo(**patient_info_dict) + patient_info = PatientInfo(**patient_core_dict) - for key, dict_value in patient_info_dict.items(): + for key, dict_value in patient_core_dict.items(): model_value = getattr(patient_info, key) if isinstance(model_value, datetime.date): model_value = model_value.isoformat() assert model_value == dict_value, f"Mismatch for {key}" -def test_tumor_info(tumor_info_dict: dict[str, Any]) -> None: +def test_tumor_core(tumor_core_dict: dict[str, Any]) -> None: """Test the TumorInfo schema.""" - tumor_info = TumorInfo(**tumor_info_dict) + tumor_core = TumorInfo(**tumor_core_dict) - for key, value in tumor_info_dict.items(): - assert getattr(tumor_info, key) == value, f"Mismatch for {key}" + for key, value in tumor_core_dict.items(): + assert getattr(tumor_core, key) == value, f"Mismatch for {key}" @pytest.fixture -def patient_info(patient_info_dict: dict[str, Any]) -> PatientInfo: +def patient_core(patient_core_dict: dict[str, Any]) -> PatientInfo: """Fixture for a sample PatientInfo instance.""" - return PatientInfo(**patient_info_dict) + return PatientInfo(**patient_core_dict) @pytest.fixture -def tumor_info(tumor_info_dict: dict[str, Any]) -> TumorInfo: +def tumor_core(tumor_core_dict: dict[str, Any]) -> TumorInfo: """Fixture for a sample TumorInfo instance.""" - return TumorInfo(**tumor_info_dict) + return TumorInfo(**tumor_core_dict) -def test_patient_record(patient_info: PatientInfo) -> None: +def test_patient_record(patient_core: PatientInfo) -> None: """Test the PatientRecord schema.""" - record = PatientRecord(_=patient_info) + record = PatientRecord(core=patient_core) - assert record.info == patient_info, "PatientRecord info does not match PatientInfo" + assert record.core == patient_core, "PatientRecord info does not match PatientInfo" -def test_tumor_record(tumor_info: TumorInfo) -> None: +def test_tumor_record(tumor_core: TumorInfo) -> None: """Test the TumorRecord schema.""" - record = TumorRecord(_=tumor_info) + record = TumorRecord(core=tumor_core) - assert record.info == tumor_info, "TumorRecord info does not match TumorInfo" + assert record.core == tumor_core, "TumorRecord info does not match TumorInfo" @pytest.fixture -def complete_record(patient_info: PatientInfo, tumor_info: TumorInfo) -> BaseRecord: +def complete_record(patient_core: PatientInfo, tumor_core: TumorInfo) -> BaseRecord: """Fixture for a sample CompleteRecord instance.""" return BaseRecord( - patient=PatientRecord(_=patient_info), - tumor=TumorRecord(_=tumor_info), + patient=PatientRecord(core=patient_core), + tumor=TumorRecord(core=tumor_core), ) def test_complete_record(complete_record: BaseRecord) -> None: """Test the CompleteRecord schema.""" - assert complete_record.patient.info.id == "12345", "Patient ID does not match" + assert complete_record.patient.core.id == "12345", "Patient ID does not match" From de658f8fa9713951911c61db05369e22e3da6f8c Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 09:28:59 +0200 Subject: [PATCH 40/78] fix: nicotine/pack years validator --- src/lydata/schema.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 881f653..44822ee 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -94,6 +94,8 @@ def check_nicotine_and_pack_years(self) -> PatientInfo: ): raise ValueError("If nicotine abuse is False, pack_years cannot be > 0.") + return self + class PatientRecord(BaseModel): """A patient's record. @@ -101,7 +103,7 @@ class PatientRecord(BaseModel): As of now, this only contains the patient information. """ - core: PatientInfo = Field(default_factory=PatientInfo, alias="core") + core: PatientInfo = Field(default_factory=PatientInfo) class TumorInfo(BaseModel): @@ -116,7 +118,7 @@ class TumorInfo(BaseModel): description="Whether the tumor is located on the mid-sagittal line.", default=False, ) - extension: bool = Field( + extension: bool | None = Field( description="Whether the tumor extends over the mid-sagittal line.", default=False, ) @@ -148,7 +150,7 @@ class TumorRecord(BaseModel): As of now, this only contains the tumor information. """ - core: TumorInfo = Field(default_factory=TumorInfo, alias="core") + core: TumorInfo = Field(default_factory=TumorInfo) def create_lnl_field(lnl: str) -> tuple[type, Field]: @@ -191,6 +193,17 @@ class ModalityRecord(BaseModel): ) +def create_modality_field(modality: str) -> tuple[type, Field]: + """Create a field for a specific modality.""" + return ( + ModalityRecord, + Field( + default_factory=ModalityRecord, + description=f"Involvement data for modality {modality}", + ), + ) + + class BaseRecord(BaseModel): """A basic record of a patient. @@ -200,3 +213,12 @@ class BaseRecord(BaseModel): patient: PatientRecord = Field(default_factory=PatientRecord) tumor: TumorRecord = Field(default_factory=TumorRecord) + + +def create_full_record_model(modalities: list[str]) -> type: + """Create a Pydantic model for a full record with all modalities.""" + return create_model( + "FullRecord", + __base__=BaseRecord, + **{mod: create_modality_field(mod) for mod in modalities}, + ) From 9bd354c56ba47f2a77dd2d2b72b1f5fee44b44d9 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:56:38 +0200 Subject: [PATCH 41/78] test: fix schema tests --- tests/test_schema.py | 22 +++++++++++----------- tests/test_validation.py | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 6c1b671..bc694b9 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -7,9 +7,9 @@ from lydata.schema import ( BaseRecord, - PatientInfo, + PatientCore, PatientRecord, - TumorInfo, + TumorCore, TumorRecord, ) @@ -49,7 +49,7 @@ def tumor_core_dict() -> dict[str, Any]: def test_patient_core(patient_core_dict: dict[str, Any]) -> None: """Test the PatientInfo schema.""" - patient_info = PatientInfo(**patient_core_dict) + patient_info = PatientCore(**patient_core_dict) for key, dict_value in patient_core_dict.items(): model_value = getattr(patient_info, key) @@ -60,32 +60,32 @@ def test_patient_core(patient_core_dict: dict[str, Any]) -> None: def test_tumor_core(tumor_core_dict: dict[str, Any]) -> None: """Test the TumorInfo schema.""" - tumor_core = TumorInfo(**tumor_core_dict) + tumor_core = TumorCore(**tumor_core_dict) for key, value in tumor_core_dict.items(): assert getattr(tumor_core, key) == value, f"Mismatch for {key}" @pytest.fixture -def patient_core(patient_core_dict: dict[str, Any]) -> PatientInfo: +def patient_core(patient_core_dict: dict[str, Any]) -> PatientCore: """Fixture for a sample PatientInfo instance.""" - return PatientInfo(**patient_core_dict) + return PatientCore(**patient_core_dict) @pytest.fixture -def tumor_core(tumor_core_dict: dict[str, Any]) -> TumorInfo: +def tumor_core(tumor_core_dict: dict[str, Any]) -> TumorCore: """Fixture for a sample TumorInfo instance.""" - return TumorInfo(**tumor_core_dict) + return TumorCore(**tumor_core_dict) -def test_patient_record(patient_core: PatientInfo) -> None: +def test_patient_record(patient_core: PatientCore) -> None: """Test the PatientRecord schema.""" record = PatientRecord(core=patient_core) assert record.core == patient_core, "PatientRecord info does not match PatientInfo" -def test_tumor_record(tumor_core: TumorInfo) -> None: +def test_tumor_record(tumor_core: TumorCore) -> None: """Test the TumorRecord schema.""" record = TumorRecord(core=tumor_core) @@ -93,7 +93,7 @@ def test_tumor_record(tumor_core: TumorInfo) -> None: @pytest.fixture -def complete_record(patient_core: PatientInfo, tumor_core: TumorInfo) -> BaseRecord: +def complete_record(patient_core: PatientCore, tumor_core: TumorCore) -> BaseRecord: """Fixture for a sample CompleteRecord instance.""" return BaseRecord( patient=PatientRecord(core=patient_core), diff --git a/tests/test_validation.py b/tests/test_validation.py index 3958f69..d5d4cf0 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,7 +1,7 @@ """Test the casting and validation of lydata datasets.""" from lydata import load_datasets -from lydata.validator import cast_types +from lydata.validator import cast_dtypes def test_casting() -> None: @@ -16,7 +16,7 @@ def test_casting() -> None: ref="6c56a630f307ffea12a2f071f18316f605beaa08", ) ) - clb_casted = cast_types(clb_raw) + clb_casted = cast_dtypes(clb_raw) assert clb_casted.patient.core.id.dtype == "string" assert clb_casted.patient.core.age.dtype == "int64" From c2c591d0d3c1feacd00ec2d4943fb133c21f34e5 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:57:09 +0200 Subject: [PATCH 42/78] feat: add `cast()` to lydata accessor --- src/lydata/accessor.py | 15 ++++++ src/lydata/validator.py | 114 ++++++++++++++++------------------------ 2 files changed, 59 insertions(+), 70 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index e1584aa..9e12f54 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -485,6 +485,21 @@ def enhance( return _sort_all(enhanced) + def cast( + self, + casters: Mapping[type, str] | None = None, + ) -> LyDataFrame: + """Cast the dtypes of the DataFrame to the expected types. + + This uses the annotations of the Pydantic schema to cast the individual columns + of the DataFrame to the expected types. It uses the ``casters`` mapping to + determine the type to cast to. By default, it uses the mapping from the + :py:func:`_get_default_casters` function. + """ + from lydata.validator import cast_dtypes + + return cast_dtypes(self._obj, casters=casters) + # Using the class below instead of pd.DataFrame enables IDE type hints. class LyDataFrame(pd.DataFrame): diff --git a/src/lydata/validator.py b/src/lydata/validator.py index e60a831..55042e1 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -18,15 +18,14 @@ import sys from collections.abc import Mapping -from typing import Any +from typing import Any, Literal from loguru import logger from pandas import PeriodDtype -from pydantic import BaseModel, Field, PastDate, create_model +from pydantic import BaseModel, PastDate -from lydata import loader from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 -from lydata.schema import BaseRecord, ModalityRecord +from lydata.schema import create_full_record_model def flatten( @@ -81,34 +80,6 @@ def unflatten(flat: dict) -> dict: return result -def move_value(mapping: dict[str, Any], from_key: str, to_key: str) -> None: - """Move a key in a dictionary to another key.""" - if from_key not in mapping: - raise KeyError(f"Key '{from_key}' not found in mapping.") - - mapping[to_key] = mapping.pop(from_key) - - -def create_modality_field(modality: str) -> tuple[type, Field]: - """Create a field for a specific modality.""" - return ( - ModalityRecord, - Field( - default_factory=ModalityRecord, - description=f"Involvement data for modality {modality}", - ), - ) - - -def create_full_record_model(modalities: list[str]) -> type: - """Create a Pydantic model for a full record with all modalities.""" - return create_model( - "FullRecord", - __base__=BaseRecord, - **{mod: create_modality_field(mod) for mod in modalities}, - ) - - def validate(dataset: LyDataFrame) -> bool: """Validate the given dataset against the lyDATA schema.""" modalities = dataset.ly.get_modalities() @@ -128,7 +99,7 @@ def validate(dataset: LyDataFrame) -> bool: return True -def get_field_annotations( +def _get_field_annotations( model: type[BaseModel], ) -> dict[str, Any]: """Get the field annotations of a three-level nested Pydantic model. @@ -143,73 +114,76 @@ def get_field_annotations( annotations = {} for field_name, field_info in model.model_fields.items(): if issubclass(field_info.annotation, BaseModel): - annotations[field_name] = get_field_annotations(field_info.annotation) + annotations[field_name] = _get_field_annotations(field_info.annotation) else: annotations[field_name] = field_info.annotation return annotations -def cast_types( +def _get_default_casters() -> Mapping[type, str]: + """Get the default dtype casters for the lyDATA schema.""" + return { + int: int, + int | None: "Int64", + float: float, + float | None: "Float64", + str: "string", + str | None: "string", + bool: bool, + bool | None: "boolean", + PastDate: PeriodDtype("D"), + PastDate | None: PeriodDtype("D"), + Literal["male", "female"]: "string", + Literal["c", "p"]: "string", + } + + +def cast_dtypes( dataset: LyDataFrame, casters: Mapping[type, str] | None = None, ) -> LyDataFrame: - """Cast the types of the ``dataset`` to the expected types. + """Cast the dtypes of the ``dataset`` to the expected types. This function uses the annotations of the Pydantic schema to cast the individual columns of the ``dataset`` to the expected types. It uses the ``casters`` mapping - to determine the type to cast to. By default, it uses the following mapping: - - .. code-block:: python - - { - int: int, - int | None: "Int64", - float: float, - float | None: "Float64", - str: "string", - str | None: "string", - bool: bool, - bool | None: "boolean", - PastDate: PeriodDtype("D"), - } + to determine the type to cast to. By default, it uses the mapping from the + :py:func:`_get_default_casters` function. That way, pandas uses e.g. the nullable integer type ``Int64`` if we specify in pydantic that a field can be an integer or None. If you want to use a different mapping, you can pass it as the ``casters`` argument. """ if casters is None: - casters = { - int: int, - int | None: "Int64", - float: float, - float | None: "Float64", - str: "string", - str | None: "string", - bool: bool, - bool | None: "boolean", - PastDate: PeriodDtype("D"), - PastDate | None: PeriodDtype("D"), - } + casters = _get_default_casters() modalities = dataset.ly.get_modalities() FullRecord = create_full_record_model(modalities) # noqa: N806 - annotations = get_field_annotations(FullRecord) + annotations = _get_field_annotations(FullRecord) annotations = flatten(annotations, max_depth=3) dtypes = {} - for col, annotation in annotations.items(): - if col not in dataset.columns: + for col in dataset.columns: + annotation = annotations.get(col, None) + fallback = dataset[col].dtype + + if annotation is None: + logger.warning( + f"No annotation found for column '{col}'. " + f"Using dtype {fallback} instead." + ) continue - dtypes[col] = casters.get(annotation, object) + dtypes[col] = casters.get(annotation, fallback) result = dataset.astype(dtypes) - logger.debug(f"Cast types: {dtypes}") + logger.success(f"Cast types: {result.dtypes.to_dict()}") return result if __name__ == "__main__": + from lydata import loader + logger.enable("lydata") logger.remove() logger.add(sys.stderr, level="DEBUG") @@ -219,5 +193,5 @@ def cast_types( ref="6c56a630f307ffea12a2f071f18316f605beaa08", ) ) - dataset = cast_types(dataset) - # validate(dataset) + dataset = cast_dtypes(dataset) + validate(dataset) From 82e6d00aa23947d9e1a7c0223f12a46720c68774 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:57:35 +0200 Subject: [PATCH 43/78] feat: add function to write JSON schema to file --- src/lydata/schema.py | 130 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 107 insertions(+), 23 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 44822ee..381c127 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -6,19 +6,26 @@ from __future__ import annotations +import json +import sys +from pathlib import Path from typing import Annotated, Any, Literal import pandas as pd +from loguru import logger from pydantic import ( BaseModel, BeforeValidator, Field, PastDate, + RootModel, create_model, field_validator, model_validator, ) +from lydata.utils import get_default_modalities + _LNLS = [ "I", "Ia", @@ -39,8 +46,13 @@ ] -class PatientInfo(BaseModel): - """Basic required patient information.""" +class PatientCore(BaseModel): + """Basic required patient information. + + This includes demographic information, such as age and sex, as well as some risk + factors for head and neck cancer, including HPV status, alcohol and nicotine abuse, + etc. + """ id: str = Field(description="Unique but anonymized identifier for a patient.") institution: str = Field(description="Hospital where the patient was treated.") @@ -87,7 +99,7 @@ def nan_to_none(cls, value: Any) -> Any: return None if pd.isna(value) else value @model_validator(mode="after") - def check_nicotine_and_pack_years(self) -> PatientInfo: + def check_nicotine_and_pack_years(self) -> PatientCore: """Ensure that if nicotine abuse is False, pack_years is not > 0.""" if not self.nicotine_abuse and ( self.pack_years is not None and self.pack_years > 0 @@ -100,14 +112,24 @@ def check_nicotine_and_pack_years(self) -> PatientInfo: class PatientRecord(BaseModel): """A patient's record. - As of now, this only contains the patient information. + Because the final dataset has a three-level header, this record holds only the + key ``core`` under which we store the actual patient information defined in the + :py:class:`PatientCore` model. """ - core: PatientInfo = Field(default_factory=PatientInfo) + core: PatientCore = Field( + title="Core", + description="Core information about the patient.", + default_factory=PatientCore, + ) + +class TumorCore(BaseModel): + """Information about the tumor of a patient. -class TumorInfo(BaseModel): - """Information about the tumor of a patient.""" + This information characterizes the primary tumor via its location, ICD-O-3 subsite, + T-category and so on. + """ location: str = Field(description="Primary tumor location.") subsite: str = Field( @@ -147,10 +169,15 @@ def nan_to_none(cls, value: Any) -> Any: class TumorRecord(BaseModel): """A tumor record of a patient. - As of now, this only contains the tumor information. + As with the patient record, this holds only the key ``core`` under which we + store the actual tumor information defined in the :py:class:`TumorCore` model. """ - core: TumorInfo = Field(default_factory=TumorInfo) + core: TumorCore = Field( + title="Core", + description="Core information about the tumor.", + default_factory=TumorCore, + ) def create_lnl_field(lnl: str) -> tuple[type, Field]: @@ -161,11 +188,8 @@ def create_lnl_field(lnl: str) -> tuple[type, Field]: ) -class ModalityInfo(BaseModel): - """Basic info about a diagnostic/pathological modality. - - Contains only the date of the modality as of now. - """ +class ModalityCore(BaseModel): + """Basic info about a diagnostic/pathological modality.""" date: PastDate | None = Field( description="Date of the diagnostic or pathological modality.", @@ -180,15 +204,27 @@ class ModalityInfo(BaseModel): class ModalityRecord(BaseModel): - """A record of the involvement patterns of a diagnostic or pathological modality.""" + """Involvement patterns of a diagnostic or pathological modality. + + This holds some basic information about the modality, which is currently limited to + the date its information was collected (e.g. the date of the PET/CT scan). + + Most importantly, this holds the ipsi- and contralateral lymph node level + involvement patterns under the respective keys ``ipsi`` and ``contra``. + """ - core: ModalityInfo = Field(default_factory=ModalityInfo) + core: ModalityCore = Field( + title="Core", + default_factory=ModalityCore, + ) ipsi: UnilateralInvolvementInfo = Field( - description="Unilateral involvement of the ipsilateral side.", + title="Ipsilateral Involvement", + description="Involvement patterns of the ipsilateral side.", default_factory=UnilateralInvolvementInfo, ) contra: UnilateralInvolvementInfo = Field( - description="Unilateral involvement of the contralateral side.", + title="Contralateral Involvement", + description="Involvement patterns of the contralateral side.", default_factory=UnilateralInvolvementInfo, ) @@ -198,8 +234,9 @@ def create_modality_field(modality: str) -> tuple[type, Field]: return ( ModalityRecord, Field( + title=modality, + description=f"Involvement patterns as observed using {modality}.", default_factory=ModalityRecord, - description=f"Involvement data for modality {modality}", ), ) @@ -211,14 +248,61 @@ class BaseRecord(BaseModel): as the data represents it. """ - patient: PatientRecord = Field(default_factory=PatientRecord) - tumor: TumorRecord = Field(default_factory=TumorRecord) + patient: PatientRecord = Field( + title="Patient", + description=( + "Characterizes the patient via demographic information and risk factors " + "associated with head and neck cancer. In order to achieve the three-level " + "header structure in the final table, there is a subkey `core` under which " + "the actual patient information is stored." + ), + default_factory=PatientRecord, + ) + tumor: TumorRecord = Field( + title="Tumor", + description=( + "Characterizes the primary tumor via its location, ICD-O-3 subsite, " + "T-category and so on. As with the patient record, this has a subkey " + "`core` under which the actual tumor information is stored." + ), + default_factory=TumorRecord, + ) -def create_full_record_model(modalities: list[str]) -> type: +def create_full_record_model( + modalities: list[str], + title: str = "FullRecord", + **kwargs: dict[str, Any], +) -> type: """Create a Pydantic model for a full record with all modalities.""" return create_model( - "FullRecord", + title, __base__=BaseRecord, **{mod: create_modality_field(mod) for mod in modalities}, + **kwargs, ) + + +def write_schema_to_file( + schema: type[BaseModel] | None = None, + file_path: Path = Path("schema.json"), +) -> None: + """Write the Pydantic schema to a file.""" + if schema is None: + modalities = get_default_modalities() + schema = create_full_record_model(modalities, title="Record") + + root_schema = RootModel[list[schema]] + + with open(file_path, "w") as f: + json_schema = root_schema.model_json_schema() + f.write(json.dumps(json_schema, indent=2)) + + logger.success(f"Schema written to {file_path}") + + +if __name__ == "__main__": + logger.enable("lydata") + logger.remove() + logger.add(sys.stderr, level="DEBUG") + write_schema_to_file() From 8e922a8bc7e66cfe55b7f54946b47dd682a0ba49 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:19:24 +0200 Subject: [PATCH 44/78] feat: add basic collector web UI --- pyproject.toml | 5 + src/lydata/collector/__init__.py | 65 + src/lydata/collector/collector.js | 39 + src/lydata/collector/index.html | 26 + uv.lock | 2125 ++++++++++++++++++----------- 5 files changed, 1501 insertions(+), 759 deletions(-) create mode 100644 src/lydata/collector/__init__.py create mode 100644 src/lydata/collector/collector.js create mode 100644 src/lydata/collector/index.html diff --git a/pyproject.toml b/pyproject.toml index 7d38443..0b95d30 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,8 @@ dependencies = [ "pydantic", "loguru", "roman", + "fastapi[standard]>=0.116.1", + "typer>=0.16.0", ] [project.urls] @@ -51,6 +53,9 @@ dev = [ "git-cliff", ] +[project.scripts] +lycollect = "lydata.collector.__init__:main" + [tool.setuptools.packages.find] where = ["src"] diff --git a/src/lydata/collector/__init__.py b/src/lydata/collector/__init__.py new file mode 100644 index 0000000..7750f66 --- /dev/null +++ b/src/lydata/collector/__init__.py @@ -0,0 +1,65 @@ +"""Submodule to collect data interactively using a simple web interface. + +The idea is to dynamically serve a JSON schema from the `lydata.schema` module. This +can then be loaded into the `index.html` file where the `JSON Editor`_ is used to +create a form for the user to fill in. This collects a list of patient records that +will then be transformed into a :py:class:`lydata.accessor.LyDataFrame`, which the user +can then download as a CSV file. +""" + +from pathlib import Path +from typing import Any + +from fastapi import FastAPI +from pydantic import RootModel +from starlette.responses import FileResponse, HTMLResponse + +import lydata + +app = FastAPI( + title="LyData Collector", + description=( + "A simple web interface to collect data for the LyData datasets. " + "This is a prototype and not intended for production use." + ), + version=lydata.__version__, +) + +BASE_DIR = Path(__file__).parent + + +@app.get("/") +def serve_index() -> HTMLResponse: + """Serve the index.html file.""" + with open(BASE_DIR / "index.html") as file: + content = file.read() + return HTMLResponse(content=content) + + +@app.get("/schema") +def serve_schema() -> dict[str, Any]: + """Serve the JSON schema for the patient and tumor records.""" + from lydata.schema import create_full_record_model, get_default_modalities + + modalities = get_default_modalities() + schema = create_full_record_model(modalities, title="Record") + + root_schema = RootModel[list[schema]] + return root_schema.model_json_schema() + + +@app.get("/collector.js") +def serve_collector_js() -> FileResponse: + """Serve the collector.js file.""" + return FileResponse(BASE_DIR / "collector.js") + + +def main() -> None: + """Run the FastAPI app using Uvicorn.""" + import uvicorn + + uvicorn.run(app, host="127.0.0.1", port=8000) + + +if __name__ == "__main__": + main() diff --git a/src/lydata/collector/collector.js b/src/lydata/collector/collector.js new file mode 100644 index 0000000..b71a083 --- /dev/null +++ b/src/lydata/collector/collector.js @@ -0,0 +1,39 @@ +fetch("/schema") + .then(response => response.json()) + .then(schema => { + // Initialize the editor with the fetched schema + const element = document.getElementById('editor_holder'); + const options = { + disable_edit_json: true, + theme: 'bootstrap5', + iconlib: 'bootstrap', + schema: schema + }; + var editor = new JSONEditor(element, options); + + // Hook up the submit button to log to the console + document.getElementById('submit').addEventListener('click', function () { + const errors = editor.validate(); + if (errors.length) { + console.error('Validation errors:', errors); + // display a bootstrap5 alert below the editor. Create one if it doesn't exist + let alert = document.querySelector('.alert'); + if (!alert) { + alert = document.createElement('div'); + alert.className = 'alert alert-danger'; + document.getElementById('editor_holder').appendChild(alert); + } + alert.textContent = 'Validation errors: ' + errors.map(e => e.message).join(', '); + } else { + // Clear any existing alert + const existingAlert = document.querySelector('.alert'); + if (existingAlert) { + console.log('Clearing existing alert'); + existingAlert.remove(); + } + // Get the value from the editor + console.log(editor.getValue()); + } + }); + }) + .catch(error => console.error('Error loading schema:', error)); diff --git a/src/lydata/collector/index.html b/src/lydata/collector/index.html new file mode 100644 index 0000000..7bb0007 --- /dev/null +++ b/src/lydata/collector/index.html @@ -0,0 +1,26 @@ + + + + + + Basic JSON Editor Example + + + + + + + + +
+

LyDATA Collector

+ +
+ + + +
+ + + diff --git a/uv.lock b/uv.lock index 043f445..8751c6d 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 1 +revision = 2 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", @@ -14,36 +14,51 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899 } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903 }, + { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, ] [[package]] name = "alabaster" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, ] [[package]] @@ -54,18 +69,18 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, ] [[package]] name = "certifi" version = "2025.6.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753 } +sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753, upload-time = "2025-06-15T02:45:51.329Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650 }, + { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650, upload-time = "2025-06-15T02:45:49.977Z" }, ] [[package]] @@ -75,197 +90,209 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191, upload-time = "2024-09-04T20:43:30.027Z" }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592, upload-time = "2024-09-04T20:43:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024, upload-time = "2024-09-04T20:43:34.186Z" }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188, upload-time = "2024-09-04T20:43:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571, upload-time = "2024-09-04T20:43:38.586Z" }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687, upload-time = "2024-09-04T20:43:40.084Z" }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211, upload-time = "2024-09-04T20:43:41.526Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325, upload-time = "2024-09-04T20:43:43.117Z" }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784, upload-time = "2024-09-04T20:43:45.256Z" }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564, upload-time = "2024-09-04T20:43:46.779Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804, upload-time = "2024-09-04T20:43:48.186Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299, upload-time = "2024-09-04T20:43:49.812Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, ] [[package]] name = "charset-normalizer" version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/28/9901804da60055b406e1a1c5ba7aac1276fb77f1dde635aabfc7fd84b8ab/charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", size = 201818 }, - { url = "https://files.pythonhosted.org/packages/d9/9b/892a8c8af9110935e5adcbb06d9c6fe741b6bb02608c6513983048ba1a18/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", size = 144649 }, - { url = "https://files.pythonhosted.org/packages/7b/a5/4179abd063ff6414223575e008593861d62abfc22455b5d1a44995b7c101/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", size = 155045 }, - { url = "https://files.pythonhosted.org/packages/3b/95/bc08c7dfeddd26b4be8c8287b9bb055716f31077c8b0ea1cd09553794665/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", size = 147356 }, - { url = "https://files.pythonhosted.org/packages/a8/2d/7a5b635aa65284bf3eab7653e8b4151ab420ecbae918d3e359d1947b4d61/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", size = 149471 }, - { url = "https://files.pythonhosted.org/packages/ae/38/51fc6ac74251fd331a8cfdb7ec57beba8c23fd5493f1050f71c87ef77ed0/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", size = 151317 }, - { url = "https://files.pythonhosted.org/packages/b7/17/edee1e32215ee6e9e46c3e482645b46575a44a2d72c7dfd49e49f60ce6bf/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", size = 146368 }, - { url = "https://files.pythonhosted.org/packages/26/2c/ea3e66f2b5f21fd00b2825c94cafb8c326ea6240cd80a91eb09e4a285830/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", size = 154491 }, - { url = "https://files.pythonhosted.org/packages/52/47/7be7fa972422ad062e909fd62460d45c3ef4c141805b7078dbab15904ff7/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", size = 157695 }, - { url = "https://files.pythonhosted.org/packages/2f/42/9f02c194da282b2b340f28e5fb60762de1151387a36842a92b533685c61e/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", size = 154849 }, - { url = "https://files.pythonhosted.org/packages/67/44/89cacd6628f31fb0b63201a618049be4be2a7435a31b55b5eb1c3674547a/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", size = 150091 }, - { url = "https://files.pythonhosted.org/packages/1f/79/4b8da9f712bc079c0f16b6d67b099b0b8d808c2292c937f267d816ec5ecc/charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", size = 98445 }, - { url = "https://files.pythonhosted.org/packages/7d/d7/96970afb4fb66497a40761cdf7bd4f6fca0fc7bafde3a84f836c1f57a926/charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", size = 105782 }, - { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794 }, - { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846 }, - { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350 }, - { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657 }, - { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260 }, - { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164 }, - { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571 }, - { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952 }, - { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959 }, - { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030 }, - { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015 }, - { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106 }, - { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402 }, - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/28/9901804da60055b406e1a1c5ba7aac1276fb77f1dde635aabfc7fd84b8ab/charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", size = 201818, upload-time = "2025-05-02T08:31:46.725Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9b/892a8c8af9110935e5adcbb06d9c6fe741b6bb02608c6513983048ba1a18/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", size = 144649, upload-time = "2025-05-02T08:31:48.889Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a5/4179abd063ff6414223575e008593861d62abfc22455b5d1a44995b7c101/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", size = 155045, upload-time = "2025-05-02T08:31:50.757Z" }, + { url = "https://files.pythonhosted.org/packages/3b/95/bc08c7dfeddd26b4be8c8287b9bb055716f31077c8b0ea1cd09553794665/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", size = 147356, upload-time = "2025-05-02T08:31:52.634Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/7a5b635aa65284bf3eab7653e8b4151ab420ecbae918d3e359d1947b4d61/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", size = 149471, upload-time = "2025-05-02T08:31:56.207Z" }, + { url = "https://files.pythonhosted.org/packages/ae/38/51fc6ac74251fd331a8cfdb7ec57beba8c23fd5493f1050f71c87ef77ed0/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", size = 151317, upload-time = "2025-05-02T08:31:57.613Z" }, + { url = "https://files.pythonhosted.org/packages/b7/17/edee1e32215ee6e9e46c3e482645b46575a44a2d72c7dfd49e49f60ce6bf/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", size = 146368, upload-time = "2025-05-02T08:31:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/26/2c/ea3e66f2b5f21fd00b2825c94cafb8c326ea6240cd80a91eb09e4a285830/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", size = 154491, upload-time = "2025-05-02T08:32:01.219Z" }, + { url = "https://files.pythonhosted.org/packages/52/47/7be7fa972422ad062e909fd62460d45c3ef4c141805b7078dbab15904ff7/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", size = 157695, upload-time = "2025-05-02T08:32:03.045Z" }, + { url = "https://files.pythonhosted.org/packages/2f/42/9f02c194da282b2b340f28e5fb60762de1151387a36842a92b533685c61e/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", size = 154849, upload-time = "2025-05-02T08:32:04.651Z" }, + { url = "https://files.pythonhosted.org/packages/67/44/89cacd6628f31fb0b63201a618049be4be2a7435a31b55b5eb1c3674547a/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", size = 150091, upload-time = "2025-05-02T08:32:06.719Z" }, + { url = "https://files.pythonhosted.org/packages/1f/79/4b8da9f712bc079c0f16b6d67b099b0b8d808c2292c937f267d816ec5ecc/charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", size = 98445, upload-time = "2025-05-02T08:32:08.66Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d7/96970afb4fb66497a40761cdf7bd4f6fca0fc7bafde3a84f836c1f57a926/charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", size = 105782, upload-time = "2025-05-02T08:32:10.46Z" }, + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, + { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, + { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, + { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, + { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "coverage" version = "7.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/e0/98670a80884f64578f0c22cd70c5e81a6e07b08167721c7487b4d70a7ca0/coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", size = 813650 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/78/1c1c5ec58f16817c09cbacb39783c3655d54a221b6552f47ff5ac9297603/coverage-7.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", size = 212028 }, - { url = "https://files.pythonhosted.org/packages/98/db/e91b9076f3a888e3b4ad7972ea3842297a52cc52e73fd1e529856e473510/coverage-7.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", size = 212420 }, - { url = "https://files.pythonhosted.org/packages/0e/d0/2b3733412954576b0aea0a16c3b6b8fbe95eb975d8bfa10b07359ead4252/coverage-7.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", size = 241529 }, - { url = "https://files.pythonhosted.org/packages/b3/00/5e2e5ae2e750a872226a68e984d4d3f3563cb01d1afb449a17aa819bc2c4/coverage-7.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3", size = 239403 }, - { url = "https://files.pythonhosted.org/packages/37/3b/a2c27736035156b0a7c20683afe7df498480c0dfdf503b8c878a21b6d7fb/coverage-7.9.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", size = 240548 }, - { url = "https://files.pythonhosted.org/packages/98/f5/13d5fc074c3c0e0dc80422d9535814abf190f1254d7c3451590dc4f8b18c/coverage-7.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", size = 240459 }, - { url = "https://files.pythonhosted.org/packages/36/24/24b9676ea06102df824c4a56ffd13dc9da7904478db519efa877d16527d5/coverage-7.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", size = 239128 }, - { url = "https://files.pythonhosted.org/packages/be/05/242b7a7d491b369ac5fee7908a6e5ba42b3030450f3ad62c645b40c23e0e/coverage-7.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", size = 239402 }, - { url = "https://files.pythonhosted.org/packages/73/e0/4de7f87192fa65c9c8fbaeb75507e124f82396b71de1797da5602898be32/coverage-7.9.1-cp310-cp310-win32.whl", hash = "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", size = 214518 }, - { url = "https://files.pythonhosted.org/packages/d5/ab/5e4e2fe458907d2a65fab62c773671cfc5ac704f1e7a9ddd91996f66e3c2/coverage-7.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", size = 215436 }, - { url = "https://files.pythonhosted.org/packages/60/34/fa69372a07d0903a78ac103422ad34db72281c9fc625eba94ac1185da66f/coverage-7.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", size = 212146 }, - { url = "https://files.pythonhosted.org/packages/27/f0/da1894915d2767f093f081c42afeba18e760f12fdd7a2f4acbe00564d767/coverage-7.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", size = 212536 }, - { url = "https://files.pythonhosted.org/packages/10/d5/3fc33b06e41e390f88eef111226a24e4504d216ab8e5d1a7089aa5a3c87a/coverage-7.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", size = 245092 }, - { url = "https://files.pythonhosted.org/packages/0a/39/7aa901c14977aba637b78e95800edf77f29f5a380d29768c5b66f258305b/coverage-7.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", size = 242806 }, - { url = "https://files.pythonhosted.org/packages/43/fc/30e5cfeaf560b1fc1989227adedc11019ce4bb7cce59d65db34fe0c2d963/coverage-7.9.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", size = 244610 }, - { url = "https://files.pythonhosted.org/packages/bf/15/cca62b13f39650bc87b2b92bb03bce7f0e79dd0bf2c7529e9fc7393e4d60/coverage-7.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", size = 244257 }, - { url = "https://files.pythonhosted.org/packages/cd/1a/c0f2abe92c29e1464dbd0ff9d56cb6c88ae2b9e21becdb38bea31fcb2f6c/coverage-7.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", size = 242309 }, - { url = "https://files.pythonhosted.org/packages/57/8d/c6fd70848bd9bf88fa90df2af5636589a8126d2170f3aade21ed53f2b67a/coverage-7.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", size = 242898 }, - { url = "https://files.pythonhosted.org/packages/c2/9e/6ca46c7bff4675f09a66fe2797cd1ad6a24f14c9c7c3b3ebe0470a6e30b8/coverage-7.9.1-cp311-cp311-win32.whl", hash = "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", size = 214561 }, - { url = "https://files.pythonhosted.org/packages/a1/30/166978c6302010742dabcdc425fa0f938fa5a800908e39aff37a7a876a13/coverage-7.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", size = 215493 }, - { url = "https://files.pythonhosted.org/packages/60/07/a6d2342cd80a5be9f0eeab115bc5ebb3917b4a64c2953534273cf9bc7ae6/coverage-7.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", size = 213869 }, - { url = "https://files.pythonhosted.org/packages/68/d9/7f66eb0a8f2fce222de7bdc2046ec41cb31fe33fb55a330037833fb88afc/coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", size = 212336 }, - { url = "https://files.pythonhosted.org/packages/20/20/e07cb920ef3addf20f052ee3d54906e57407b6aeee3227a9c91eea38a665/coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", size = 212571 }, - { url = "https://files.pythonhosted.org/packages/78/f8/96f155de7e9e248ca9c8ff1a40a521d944ba48bec65352da9be2463745bf/coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", size = 246377 }, - { url = "https://files.pythonhosted.org/packages/3e/cf/1d783bd05b7bca5c10ded5f946068909372e94615a4416afadfe3f63492d/coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", size = 243394 }, - { url = "https://files.pythonhosted.org/packages/02/dd/e7b20afd35b0a1abea09fb3998e1abc9f9bd953bee548f235aebd2b11401/coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", size = 245586 }, - { url = "https://files.pythonhosted.org/packages/4e/38/b30b0006fea9d617d1cb8e43b1bc9a96af11eff42b87eb8c716cf4d37469/coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", size = 245396 }, - { url = "https://files.pythonhosted.org/packages/31/e4/4d8ec1dc826e16791f3daf1b50943e8e7e1eb70e8efa7abb03936ff48418/coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", size = 243577 }, - { url = "https://files.pythonhosted.org/packages/25/f4/b0e96c5c38e6e40ef465c4bc7f138863e2909c00e54a331da335faf0d81a/coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", size = 244809 }, - { url = "https://files.pythonhosted.org/packages/8a/65/27e0a1fa5e2e5079bdca4521be2f5dabf516f94e29a0defed35ac2382eb2/coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", size = 214724 }, - { url = "https://files.pythonhosted.org/packages/9b/a8/d5b128633fd1a5e0401a4160d02fa15986209a9e47717174f99dc2f7166d/coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", size = 215535 }, - { url = "https://files.pythonhosted.org/packages/a3/37/84bba9d2afabc3611f3e4325ee2c6a47cd449b580d4a606b240ce5a6f9bf/coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", size = 213904 }, - { url = "https://files.pythonhosted.org/packages/d0/a7/a027970c991ca90f24e968999f7d509332daf6b8c3533d68633930aaebac/coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", size = 212358 }, - { url = "https://files.pythonhosted.org/packages/f2/48/6aaed3651ae83b231556750280682528fea8ac7f1232834573472d83e459/coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", size = 212620 }, - { url = "https://files.pythonhosted.org/packages/6c/2a/f4b613f3b44d8b9f144847c89151992b2b6b79cbc506dee89ad0c35f209d/coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", size = 245788 }, - { url = "https://files.pythonhosted.org/packages/04/d2/de4fdc03af5e4e035ef420ed26a703c6ad3d7a07aff2e959eb84e3b19ca8/coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", size = 243001 }, - { url = "https://files.pythonhosted.org/packages/f5/e8/eed18aa5583b0423ab7f04e34659e51101135c41cd1dcb33ac1d7013a6d6/coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", size = 244985 }, - { url = "https://files.pythonhosted.org/packages/17/f8/ae9e5cce8885728c934eaa58ebfa8281d488ef2afa81c3dbc8ee9e6d80db/coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", size = 245152 }, - { url = "https://files.pythonhosted.org/packages/5a/c8/272c01ae792bb3af9b30fac14d71d63371db227980682836ec388e2c57c0/coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", size = 243123 }, - { url = "https://files.pythonhosted.org/packages/8c/d0/2819a1e3086143c094ab446e3bdf07138527a7b88cb235c488e78150ba7a/coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", size = 244506 }, - { url = "https://files.pythonhosted.org/packages/8b/4e/9f6117b89152df7b6112f65c7a4ed1f2f5ec8e60c4be8f351d91e7acc848/coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", size = 214766 }, - { url = "https://files.pythonhosted.org/packages/27/0f/4b59f7c93b52c2c4ce7387c5a4e135e49891bb3b7408dcc98fe44033bbe0/coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", size = 215568 }, - { url = "https://files.pythonhosted.org/packages/09/1e/9679826336f8c67b9c39a359352882b24a8a7aee48d4c9cad08d38d7510f/coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", size = 213939 }, - { url = "https://files.pythonhosted.org/packages/bb/5b/5c6b4e7a407359a2e3b27bf9c8a7b658127975def62077d441b93a30dbe8/coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", size = 213079 }, - { url = "https://files.pythonhosted.org/packages/a2/22/1e2e07279fd2fd97ae26c01cc2186e2258850e9ec125ae87184225662e89/coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", size = 213299 }, - { url = "https://files.pythonhosted.org/packages/14/c0/4c5125a4b69d66b8c85986d3321520f628756cf524af810baab0790c7647/coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", size = 256535 }, - { url = "https://files.pythonhosted.org/packages/81/8b/e36a04889dda9960be4263e95e777e7b46f1bb4fc32202612c130a20c4da/coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", size = 252756 }, - { url = "https://files.pythonhosted.org/packages/98/82/be04eff8083a09a4622ecd0e1f31a2c563dbea3ed848069e7b0445043a70/coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", size = 254912 }, - { url = "https://files.pythonhosted.org/packages/0f/25/c26610a2c7f018508a5ab958e5b3202d900422cf7cdca7670b6b8ca4e8df/coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", size = 256144 }, - { url = "https://files.pythonhosted.org/packages/c5/8b/fb9425c4684066c79e863f1e6e7ecebb49e3a64d9f7f7860ef1688c56f4a/coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", size = 254257 }, - { url = "https://files.pythonhosted.org/packages/93/df/27b882f54157fc1131e0e215b0da3b8d608d9b8ef79a045280118a8f98fe/coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", size = 255094 }, - { url = "https://files.pythonhosted.org/packages/41/5f/cad1c3dbed8b3ee9e16fa832afe365b4e3eeab1fb6edb65ebbf745eabc92/coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", size = 215437 }, - { url = "https://files.pythonhosted.org/packages/99/4d/fad293bf081c0e43331ca745ff63673badc20afea2104b431cdd8c278b4c/coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", size = 216605 }, - { url = "https://files.pythonhosted.org/packages/1f/56/4ee027d5965fc7fc126d7ec1187529cc30cc7d740846e1ecb5e92d31b224/coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", size = 214392 }, - { url = "https://files.pythonhosted.org/packages/3e/e5/c723545c3fd3204ebde3b4cc4b927dce709d3b6dc577754bb57f63ca4a4a/coverage-7.9.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", size = 204009 }, - { url = "https://files.pythonhosted.org/packages/08/b8/7ddd1e8ba9701dea08ce22029917140e6f66a859427406579fd8d0ca7274/coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", size = 204000 }, +sdist = { url = "https://files.pythonhosted.org/packages/e7/e0/98670a80884f64578f0c22cd70c5e81a6e07b08167721c7487b4d70a7ca0/coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", size = 813650, upload-time = "2025-06-13T13:02:28.627Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/78/1c1c5ec58f16817c09cbacb39783c3655d54a221b6552f47ff5ac9297603/coverage-7.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", size = 212028, upload-time = "2025-06-13T13:00:29.293Z" }, + { url = "https://files.pythonhosted.org/packages/98/db/e91b9076f3a888e3b4ad7972ea3842297a52cc52e73fd1e529856e473510/coverage-7.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", size = 212420, upload-time = "2025-06-13T13:00:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/0e/d0/2b3733412954576b0aea0a16c3b6b8fbe95eb975d8bfa10b07359ead4252/coverage-7.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", size = 241529, upload-time = "2025-06-13T13:00:35.786Z" }, + { url = "https://files.pythonhosted.org/packages/b3/00/5e2e5ae2e750a872226a68e984d4d3f3563cb01d1afb449a17aa819bc2c4/coverage-7.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3", size = 239403, upload-time = "2025-06-13T13:00:37.399Z" }, + { url = "https://files.pythonhosted.org/packages/37/3b/a2c27736035156b0a7c20683afe7df498480c0dfdf503b8c878a21b6d7fb/coverage-7.9.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", size = 240548, upload-time = "2025-06-13T13:00:39.647Z" }, + { url = "https://files.pythonhosted.org/packages/98/f5/13d5fc074c3c0e0dc80422d9535814abf190f1254d7c3451590dc4f8b18c/coverage-7.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", size = 240459, upload-time = "2025-06-13T13:00:40.934Z" }, + { url = "https://files.pythonhosted.org/packages/36/24/24b9676ea06102df824c4a56ffd13dc9da7904478db519efa877d16527d5/coverage-7.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", size = 239128, upload-time = "2025-06-13T13:00:42.343Z" }, + { url = "https://files.pythonhosted.org/packages/be/05/242b7a7d491b369ac5fee7908a6e5ba42b3030450f3ad62c645b40c23e0e/coverage-7.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", size = 239402, upload-time = "2025-06-13T13:00:43.634Z" }, + { url = "https://files.pythonhosted.org/packages/73/e0/4de7f87192fa65c9c8fbaeb75507e124f82396b71de1797da5602898be32/coverage-7.9.1-cp310-cp310-win32.whl", hash = "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", size = 214518, upload-time = "2025-06-13T13:00:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ab/5e4e2fe458907d2a65fab62c773671cfc5ac704f1e7a9ddd91996f66e3c2/coverage-7.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", size = 215436, upload-time = "2025-06-13T13:00:47.245Z" }, + { url = "https://files.pythonhosted.org/packages/60/34/fa69372a07d0903a78ac103422ad34db72281c9fc625eba94ac1185da66f/coverage-7.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", size = 212146, upload-time = "2025-06-13T13:00:48.496Z" }, + { url = "https://files.pythonhosted.org/packages/27/f0/da1894915d2767f093f081c42afeba18e760f12fdd7a2f4acbe00564d767/coverage-7.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", size = 212536, upload-time = "2025-06-13T13:00:51.535Z" }, + { url = "https://files.pythonhosted.org/packages/10/d5/3fc33b06e41e390f88eef111226a24e4504d216ab8e5d1a7089aa5a3c87a/coverage-7.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", size = 245092, upload-time = "2025-06-13T13:00:52.883Z" }, + { url = "https://files.pythonhosted.org/packages/0a/39/7aa901c14977aba637b78e95800edf77f29f5a380d29768c5b66f258305b/coverage-7.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", size = 242806, upload-time = "2025-06-13T13:00:54.571Z" }, + { url = "https://files.pythonhosted.org/packages/43/fc/30e5cfeaf560b1fc1989227adedc11019ce4bb7cce59d65db34fe0c2d963/coverage-7.9.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", size = 244610, upload-time = "2025-06-13T13:00:56.932Z" }, + { url = "https://files.pythonhosted.org/packages/bf/15/cca62b13f39650bc87b2b92bb03bce7f0e79dd0bf2c7529e9fc7393e4d60/coverage-7.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", size = 244257, upload-time = "2025-06-13T13:00:58.545Z" }, + { url = "https://files.pythonhosted.org/packages/cd/1a/c0f2abe92c29e1464dbd0ff9d56cb6c88ae2b9e21becdb38bea31fcb2f6c/coverage-7.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", size = 242309, upload-time = "2025-06-13T13:00:59.836Z" }, + { url = "https://files.pythonhosted.org/packages/57/8d/c6fd70848bd9bf88fa90df2af5636589a8126d2170f3aade21ed53f2b67a/coverage-7.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", size = 242898, upload-time = "2025-06-13T13:01:02.506Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9e/6ca46c7bff4675f09a66fe2797cd1ad6a24f14c9c7c3b3ebe0470a6e30b8/coverage-7.9.1-cp311-cp311-win32.whl", hash = "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", size = 214561, upload-time = "2025-06-13T13:01:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/a1/30/166978c6302010742dabcdc425fa0f938fa5a800908e39aff37a7a876a13/coverage-7.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", size = 215493, upload-time = "2025-06-13T13:01:05.702Z" }, + { url = "https://files.pythonhosted.org/packages/60/07/a6d2342cd80a5be9f0eeab115bc5ebb3917b4a64c2953534273cf9bc7ae6/coverage-7.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", size = 213869, upload-time = "2025-06-13T13:01:09.345Z" }, + { url = "https://files.pythonhosted.org/packages/68/d9/7f66eb0a8f2fce222de7bdc2046ec41cb31fe33fb55a330037833fb88afc/coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", size = 212336, upload-time = "2025-06-13T13:01:10.909Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/e07cb920ef3addf20f052ee3d54906e57407b6aeee3227a9c91eea38a665/coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", size = 212571, upload-time = "2025-06-13T13:01:12.518Z" }, + { url = "https://files.pythonhosted.org/packages/78/f8/96f155de7e9e248ca9c8ff1a40a521d944ba48bec65352da9be2463745bf/coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", size = 246377, upload-time = "2025-06-13T13:01:14.87Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cf/1d783bd05b7bca5c10ded5f946068909372e94615a4416afadfe3f63492d/coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", size = 243394, upload-time = "2025-06-13T13:01:16.23Z" }, + { url = "https://files.pythonhosted.org/packages/02/dd/e7b20afd35b0a1abea09fb3998e1abc9f9bd953bee548f235aebd2b11401/coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", size = 245586, upload-time = "2025-06-13T13:01:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/4e/38/b30b0006fea9d617d1cb8e43b1bc9a96af11eff42b87eb8c716cf4d37469/coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", size = 245396, upload-time = "2025-06-13T13:01:19.164Z" }, + { url = "https://files.pythonhosted.org/packages/31/e4/4d8ec1dc826e16791f3daf1b50943e8e7e1eb70e8efa7abb03936ff48418/coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", size = 243577, upload-time = "2025-06-13T13:01:22.433Z" }, + { url = "https://files.pythonhosted.org/packages/25/f4/b0e96c5c38e6e40ef465c4bc7f138863e2909c00e54a331da335faf0d81a/coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", size = 244809, upload-time = "2025-06-13T13:01:24.143Z" }, + { url = "https://files.pythonhosted.org/packages/8a/65/27e0a1fa5e2e5079bdca4521be2f5dabf516f94e29a0defed35ac2382eb2/coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", size = 214724, upload-time = "2025-06-13T13:01:25.435Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a8/d5b128633fd1a5e0401a4160d02fa15986209a9e47717174f99dc2f7166d/coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", size = 215535, upload-time = "2025-06-13T13:01:27.861Z" }, + { url = "https://files.pythonhosted.org/packages/a3/37/84bba9d2afabc3611f3e4325ee2c6a47cd449b580d4a606b240ce5a6f9bf/coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", size = 213904, upload-time = "2025-06-13T13:01:29.202Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a7/a027970c991ca90f24e968999f7d509332daf6b8c3533d68633930aaebac/coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", size = 212358, upload-time = "2025-06-13T13:01:30.909Z" }, + { url = "https://files.pythonhosted.org/packages/f2/48/6aaed3651ae83b231556750280682528fea8ac7f1232834573472d83e459/coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", size = 212620, upload-time = "2025-06-13T13:01:32.256Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2a/f4b613f3b44d8b9f144847c89151992b2b6b79cbc506dee89ad0c35f209d/coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", size = 245788, upload-time = "2025-06-13T13:01:33.948Z" }, + { url = "https://files.pythonhosted.org/packages/04/d2/de4fdc03af5e4e035ef420ed26a703c6ad3d7a07aff2e959eb84e3b19ca8/coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", size = 243001, upload-time = "2025-06-13T13:01:35.285Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e8/eed18aa5583b0423ab7f04e34659e51101135c41cd1dcb33ac1d7013a6d6/coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", size = 244985, upload-time = "2025-06-13T13:01:36.712Z" }, + { url = "https://files.pythonhosted.org/packages/17/f8/ae9e5cce8885728c934eaa58ebfa8281d488ef2afa81c3dbc8ee9e6d80db/coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", size = 245152, upload-time = "2025-06-13T13:01:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/5a/c8/272c01ae792bb3af9b30fac14d71d63371db227980682836ec388e2c57c0/coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", size = 243123, upload-time = "2025-06-13T13:01:40.727Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d0/2819a1e3086143c094ab446e3bdf07138527a7b88cb235c488e78150ba7a/coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", size = 244506, upload-time = "2025-06-13T13:01:42.184Z" }, + { url = "https://files.pythonhosted.org/packages/8b/4e/9f6117b89152df7b6112f65c7a4ed1f2f5ec8e60c4be8f351d91e7acc848/coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", size = 214766, upload-time = "2025-06-13T13:01:44.482Z" }, + { url = "https://files.pythonhosted.org/packages/27/0f/4b59f7c93b52c2c4ce7387c5a4e135e49891bb3b7408dcc98fe44033bbe0/coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", size = 215568, upload-time = "2025-06-13T13:01:45.772Z" }, + { url = "https://files.pythonhosted.org/packages/09/1e/9679826336f8c67b9c39a359352882b24a8a7aee48d4c9cad08d38d7510f/coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", size = 213939, upload-time = "2025-06-13T13:01:47.087Z" }, + { url = "https://files.pythonhosted.org/packages/bb/5b/5c6b4e7a407359a2e3b27bf9c8a7b658127975def62077d441b93a30dbe8/coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", size = 213079, upload-time = "2025-06-13T13:01:48.554Z" }, + { url = "https://files.pythonhosted.org/packages/a2/22/1e2e07279fd2fd97ae26c01cc2186e2258850e9ec125ae87184225662e89/coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", size = 213299, upload-time = "2025-06-13T13:01:49.997Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/4c5125a4b69d66b8c85986d3321520f628756cf524af810baab0790c7647/coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", size = 256535, upload-time = "2025-06-13T13:01:51.314Z" }, + { url = "https://files.pythonhosted.org/packages/81/8b/e36a04889dda9960be4263e95e777e7b46f1bb4fc32202612c130a20c4da/coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", size = 252756, upload-time = "2025-06-13T13:01:54.403Z" }, + { url = "https://files.pythonhosted.org/packages/98/82/be04eff8083a09a4622ecd0e1f31a2c563dbea3ed848069e7b0445043a70/coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", size = 254912, upload-time = "2025-06-13T13:01:56.769Z" }, + { url = "https://files.pythonhosted.org/packages/0f/25/c26610a2c7f018508a5ab958e5b3202d900422cf7cdca7670b6b8ca4e8df/coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", size = 256144, upload-time = "2025-06-13T13:01:58.19Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8b/fb9425c4684066c79e863f1e6e7ecebb49e3a64d9f7f7860ef1688c56f4a/coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", size = 254257, upload-time = "2025-06-13T13:01:59.645Z" }, + { url = "https://files.pythonhosted.org/packages/93/df/27b882f54157fc1131e0e215b0da3b8d608d9b8ef79a045280118a8f98fe/coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", size = 255094, upload-time = "2025-06-13T13:02:01.37Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/cad1c3dbed8b3ee9e16fa832afe365b4e3eeab1fb6edb65ebbf745eabc92/coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", size = 215437, upload-time = "2025-06-13T13:02:02.905Z" }, + { url = "https://files.pythonhosted.org/packages/99/4d/fad293bf081c0e43331ca745ff63673badc20afea2104b431cdd8c278b4c/coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", size = 216605, upload-time = "2025-06-13T13:02:05.638Z" }, + { url = "https://files.pythonhosted.org/packages/1f/56/4ee027d5965fc7fc126d7ec1187529cc30cc7d740846e1ecb5e92d31b224/coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", size = 214392, upload-time = "2025-06-13T13:02:07.642Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e5/c723545c3fd3204ebde3b4cc4b927dce709d3b6dc577754bb57f63ca4a4a/coverage-7.9.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", size = 204009, upload-time = "2025-06-13T13:02:25.787Z" }, + { url = "https://files.pythonhosted.org/packages/08/b8/7ddd1e8ba9701dea08ce22029917140e6f66a859427406579fd8d0ca7274/coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", size = 204000, upload-time = "2025-06-13T13:02:27.173Z" }, ] [package.optional-dependencies] @@ -280,44 +307,44 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712 }, - { url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335 }, - { url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487 }, - { url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922 }, - { url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433 }, - { url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163 }, - { url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687 }, - { url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623 }, - { url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447 }, - { url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830 }, - { url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769 }, - { url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441 }, - { url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836 }, - { url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746 }, - { url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456 }, - { url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495 }, - { url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540 }, - { url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052 }, - { url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024 }, - { url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442 }, - { url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038 }, - { url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964 }, - { url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557 }, - { url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508 }, - { url = "https://files.pythonhosted.org/packages/16/33/b38e9d372afde56906a23839302c19abdac1c505bfb4776c1e4b07c3e145/cryptography-45.0.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a77c6fb8d76e9c9f99f2f3437c1a4ac287b34eaf40997cfab1e9bd2be175ac39", size = 3580103 }, - { url = "https://files.pythonhosted.org/packages/c4/b9/357f18064ec09d4807800d05a48f92f3b369056a12f995ff79549fbb31f1/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7aad98a25ed8ac917fdd8a9c1e706e5a0956e06c498be1f713b61734333a4507", size = 4143732 }, - { url = "https://files.pythonhosted.org/packages/c4/9c/7f7263b03d5db329093617648b9bd55c953de0b245e64e866e560f9aac07/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3530382a43a0e524bc931f187fc69ef4c42828cf7d7f592f7f249f602b5a4ab0", size = 4385424 }, - { url = "https://files.pythonhosted.org/packages/a6/5a/6aa9d8d5073d5acc0e04e95b2860ef2684b2bd2899d8795fc443013e263b/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:6b613164cb8425e2f8db5849ffb84892e523bf6d26deb8f9bb76ae86181fa12b", size = 4142438 }, - { url = "https://files.pythonhosted.org/packages/42/1c/71c638420f2cdd96d9c2b287fec515faf48679b33a2b583d0f1eda3a3375/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:96d4819e25bf3b685199b304a0029ce4a3caf98947ce8a066c9137cc78ad2c58", size = 4384622 }, - { url = "https://files.pythonhosted.org/packages/ef/ab/e3a055c34e97deadbf0d846e189237d3385dca99e1a7e27384c3b2292041/cryptography-45.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b97737a3ffbea79eebb062eb0d67d72307195035332501722a9ca86bab9e3ab2", size = 3328911 }, - { url = "https://files.pythonhosted.org/packages/ea/ba/cf442ae99ef363855ed84b39e0fb3c106ac66b7a7703f3c9c9cfe05412cb/cryptography-45.0.4-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4828190fb6c4bcb6ebc6331f01fe66ae838bb3bd58e753b59d4b22eb444b996c", size = 3590512 }, - { url = "https://files.pythonhosted.org/packages/28/9a/a7d5bb87d149eb99a5abdc69a41e4e47b8001d767e5f403f78bfaafc7aa7/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03dbff8411206713185b8cebe31bc5c0eb544799a50c09035733716b386e61a4", size = 4146899 }, - { url = "https://files.pythonhosted.org/packages/17/11/9361c2c71c42cc5c465cf294c8030e72fb0c87752bacbd7a3675245e3db3/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51dfbd4d26172d31150d84c19bbe06c68ea4b7f11bbc7b3a5e146b367c311349", size = 4388900 }, - { url = "https://files.pythonhosted.org/packages/c0/76/f95b83359012ee0e670da3e41c164a0c256aeedd81886f878911581d852f/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:0339a692de47084969500ee455e42c58e449461e0ec845a34a6a9b9bf7df7fb8", size = 4146422 }, - { url = "https://files.pythonhosted.org/packages/09/ad/5429fcc4def93e577a5407988f89cf15305e64920203d4ac14601a9dc876/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:0cf13c77d710131d33e63626bd55ae7c0efb701ebdc2b3a7952b9b23a0412862", size = 4388475 }, - { url = "https://files.pythonhosted.org/packages/99/49/0ab9774f64555a1b50102757811508f5ace451cf5dc0a2d074a4b9deca6a/cryptography-45.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bbc505d1dc469ac12a0a064214879eac6294038d6b24ae9f71faae1448a9608d", size = 3337594 }, +sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890, upload-time = "2025-06-10T00:03:51.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712, upload-time = "2025-06-10T00:02:38.826Z" }, + { url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335, upload-time = "2025-06-10T00:02:41.64Z" }, + { url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487, upload-time = "2025-06-10T00:02:43.696Z" }, + { url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922, upload-time = "2025-06-10T00:02:45.334Z" }, + { url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433, upload-time = "2025-06-10T00:02:47.359Z" }, + { url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163, upload-time = "2025-06-10T00:02:49.412Z" }, + { url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687, upload-time = "2025-06-10T00:02:50.976Z" }, + { url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623, upload-time = "2025-06-10T00:02:52.542Z" }, + { url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447, upload-time = "2025-06-10T00:02:54.63Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830, upload-time = "2025-06-10T00:02:56.689Z" }, + { url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769, upload-time = "2025-06-10T00:02:58.467Z" }, + { url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441, upload-time = "2025-06-10T00:03:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836, upload-time = "2025-06-10T00:03:01.726Z" }, + { url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746, upload-time = "2025-06-10T00:03:03.94Z" }, + { url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456, upload-time = "2025-06-10T00:03:05.589Z" }, + { url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495, upload-time = "2025-06-10T00:03:09.172Z" }, + { url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540, upload-time = "2025-06-10T00:03:10.835Z" }, + { url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052, upload-time = "2025-06-10T00:03:12.448Z" }, + { url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024, upload-time = "2025-06-10T00:03:13.976Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442, upload-time = "2025-06-10T00:03:16.248Z" }, + { url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038, upload-time = "2025-06-10T00:03:18.4Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964, upload-time = "2025-06-10T00:03:20.06Z" }, + { url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557, upload-time = "2025-06-10T00:03:22.563Z" }, + { url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508, upload-time = "2025-06-10T00:03:24.586Z" }, + { url = "https://files.pythonhosted.org/packages/16/33/b38e9d372afde56906a23839302c19abdac1c505bfb4776c1e4b07c3e145/cryptography-45.0.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a77c6fb8d76e9c9f99f2f3437c1a4ac287b34eaf40997cfab1e9bd2be175ac39", size = 3580103, upload-time = "2025-06-10T00:03:26.207Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b9/357f18064ec09d4807800d05a48f92f3b369056a12f995ff79549fbb31f1/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7aad98a25ed8ac917fdd8a9c1e706e5a0956e06c498be1f713b61734333a4507", size = 4143732, upload-time = "2025-06-10T00:03:27.896Z" }, + { url = "https://files.pythonhosted.org/packages/c4/9c/7f7263b03d5db329093617648b9bd55c953de0b245e64e866e560f9aac07/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3530382a43a0e524bc931f187fc69ef4c42828cf7d7f592f7f249f602b5a4ab0", size = 4385424, upload-time = "2025-06-10T00:03:29.992Z" }, + { url = "https://files.pythonhosted.org/packages/a6/5a/6aa9d8d5073d5acc0e04e95b2860ef2684b2bd2899d8795fc443013e263b/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:6b613164cb8425e2f8db5849ffb84892e523bf6d26deb8f9bb76ae86181fa12b", size = 4142438, upload-time = "2025-06-10T00:03:31.782Z" }, + { url = "https://files.pythonhosted.org/packages/42/1c/71c638420f2cdd96d9c2b287fec515faf48679b33a2b583d0f1eda3a3375/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:96d4819e25bf3b685199b304a0029ce4a3caf98947ce8a066c9137cc78ad2c58", size = 4384622, upload-time = "2025-06-10T00:03:33.491Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ab/e3a055c34e97deadbf0d846e189237d3385dca99e1a7e27384c3b2292041/cryptography-45.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b97737a3ffbea79eebb062eb0d67d72307195035332501722a9ca86bab9e3ab2", size = 3328911, upload-time = "2025-06-10T00:03:35.035Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ba/cf442ae99ef363855ed84b39e0fb3c106ac66b7a7703f3c9c9cfe05412cb/cryptography-45.0.4-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4828190fb6c4bcb6ebc6331f01fe66ae838bb3bd58e753b59d4b22eb444b996c", size = 3590512, upload-time = "2025-06-10T00:03:36.982Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/a7d5bb87d149eb99a5abdc69a41e4e47b8001d767e5f403f78bfaafc7aa7/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03dbff8411206713185b8cebe31bc5c0eb544799a50c09035733716b386e61a4", size = 4146899, upload-time = "2025-06-10T00:03:38.659Z" }, + { url = "https://files.pythonhosted.org/packages/17/11/9361c2c71c42cc5c465cf294c8030e72fb0c87752bacbd7a3675245e3db3/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51dfbd4d26172d31150d84c19bbe06c68ea4b7f11bbc7b3a5e146b367c311349", size = 4388900, upload-time = "2025-06-10T00:03:40.233Z" }, + { url = "https://files.pythonhosted.org/packages/c0/76/f95b83359012ee0e670da3e41c164a0c256aeedd81886f878911581d852f/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:0339a692de47084969500ee455e42c58e449461e0ec845a34a6a9b9bf7df7fb8", size = 4146422, upload-time = "2025-06-10T00:03:41.827Z" }, + { url = "https://files.pythonhosted.org/packages/09/ad/5429fcc4def93e577a5407988f89cf15305e64920203d4ac14601a9dc876/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:0cf13c77d710131d33e63626bd55ae7c0efb701ebdc2b3a7952b9b23a0412862", size = 4388475, upload-time = "2025-06-10T00:03:43.493Z" }, + { url = "https://files.pythonhosted.org/packages/99/49/0ab9774f64555a1b50102757811508f5ace451cf5dc0a2d074a4b9deca6a/cryptography-45.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bbc505d1dc469ac12a0a064214879eac6294038d6b24ae9f71faae1448a9608d", size = 3337594, upload-time = "2025-06-10T00:03:45.523Z" }, ] [[package]] @@ -327,27 +354,49 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744 } +sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744, upload-time = "2025-01-27T10:46:25.7Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 }, + { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998, upload-time = "2025-01-27T10:46:09.186Z" }, ] [[package]] name = "distlib" version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload-time = "2024-10-09T18:35:47.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" }, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, + { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" }, ] [[package]] name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, +] + +[[package]] +name = "email-validator" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967, upload-time = "2024-06-20T11:30:30.034Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, + { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521, upload-time = "2024-06-20T11:30:28.248Z" }, ] [[package]] @@ -357,71 +406,206 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 } +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674 }, + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, +] + +[[package]] +name = "fastapi" +version = "0.116.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485, upload-time = "2025-07-11T16:22:32.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631, upload-time = "2025-07-11T16:22:30.485Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "email-validator" }, + { name = "fastapi-cli", extra = ["standard"] }, + { name = "httpx" }, + { name = "jinja2" }, + { name = "python-multipart" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cli" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich-toolkit" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/94/3ef75d9c7c32936ecb539b9750ccbdc3d2568efd73b1cb913278375f4533/fastapi_cli-0.0.8.tar.gz", hash = "sha256:2360f2989b1ab4a3d7fc8b3a0b20e8288680d8af2e31de7c38309934d7f8a0ee", size = 16884, upload-time = "2025-07-07T14:44:09.326Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/3f/6ad3103c5f59208baf4c798526daea6a74085bb35d1c161c501863470476/fastapi_cli-0.0.8-py3-none-any.whl", hash = "sha256:0ea95d882c85b9219a75a65ab27e8da17dac02873e456850fa0a726e96e985eb", size = 10770, upload-time = "2025-07-07T14:44:08.255Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "fastapi-cloud-cli" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cloud-cli" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "pydantic", extra = ["email"] }, + { name = "rich-toolkit" }, + { name = "rignore" }, + { name = "sentry-sdk" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/2e/3b6e5016affc310e5109bc580f760586eabecea0c8a7ab067611cd849ac0/fastapi_cloud_cli-0.1.5.tar.gz", hash = "sha256:341ee585eb731a6d3c3656cb91ad38e5f39809bf1a16d41de1333e38635a7937", size = 22710, upload-time = "2025-07-28T13:30:48.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/a6/5aa862489a2918a096166fd98d9fe86b7fd53c607678b3fa9d8c432d88d5/fastapi_cloud_cli-0.1.5-py3-none-any.whl", hash = "sha256:d80525fb9c0e8af122370891f9fa83cf5d496e4ad47a8dd26c0496a6c85a012a", size = 18992, upload-time = "2025-07-28T13:30:47.427Z" }, ] [[package]] name = "filelock" version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, ] [[package]] name = "git-cliff" version = "2.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/4b/e5569d967c9428e04db1439557d4c0f3d8bf6341815fa68cf01c0f37d0a6/git_cliff-2.9.1.tar.gz", hash = "sha256:5b9e69b29f076984ebf88489bddedd45c87f54ad354866e7fc031d87a7686a25", size = 92495 } +sdist = { url = "https://files.pythonhosted.org/packages/06/4b/e5569d967c9428e04db1439557d4c0f3d8bf6341815fa68cf01c0f37d0a6/git_cliff-2.9.1.tar.gz", hash = "sha256:5b9e69b29f076984ebf88489bddedd45c87f54ad354866e7fc031d87a7686a25", size = 92495, upload-time = "2025-06-03T11:12:13.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/ec/81b536dc79faa796f341b9d6551dc250278b577b17e5193bd19eea938597/git_cliff-2.9.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:220620392ccd6c12a49f816baaea530c32d96b54fce0ebdb7b688b4ba38a0627", size = 6455305, upload-time = "2025-06-03T11:11:52.177Z" }, + { url = "https://files.pythonhosted.org/packages/91/46/054f94b678d66bf56040b88ad496a7f7e89a83f0a5539f63a6552133d5f4/git_cliff-2.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f0790924301176bcf6cab274d4d8b791ffc6791a6541929c29a2c81a10ca0d82", size = 5982424, upload-time = "2025-06-03T11:11:54.829Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ac/9a393624c11e736ebed6f83e2b1a0e622d88315eaf51204192987adfe8cc/git_cliff-2.9.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74afc8b388f32f4661e81c758218578cd7fef36fcc60ffe035027f8eb7b9f9c6", size = 6351400, upload-time = "2025-06-03T11:11:57.272Z" }, + { url = "https://files.pythonhosted.org/packages/51/67/0cdb7c20acebbe1c9c278cc5a4a8b119ccf765fb278cbb4a4a6a614115c3/git_cliff-2.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cee37c70b0ce28d39ad64bdc8eb9d09e415722fd040f61362c5a8c0a85a5161", size = 6805681, upload-time = "2025-06-03T11:12:01.023Z" }, + { url = "https://files.pythonhosted.org/packages/4c/af/213d98b64d0b0bf63d4580f01ef2de521f06883dfdde8e292446e6b5db59/git_cliff-2.9.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:555493177f69b4471996f3a80c1f05c3203789080dde96c7b5a05f05aa3f7c49", size = 6410027, upload-time = "2025-06-03T11:12:02.95Z" }, + { url = "https://files.pythonhosted.org/packages/33/64/3c995aeae2b94cce75faa7a86677aeaf157539733319739537f1fc163196/git_cliff-2.9.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:45dfefb7f4589fa73a8ae95bfadb233988f64098a08ecd3724334ae58121e004", size = 6584265, upload-time = "2025-06-03T11:12:05.477Z" }, + { url = "https://files.pythonhosted.org/packages/96/bd/2843e660b7f5e28b6bc1001af2ca9a76887ea19bef0b6a2788566f443fc8/git_cliff-2.9.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:067a5112999bdb917dcd9cd4b195f32cb0fcd1a0161035f443c02a3536252727", size = 7037288, upload-time = "2025-06-03T11:12:08.051Z" }, + { url = "https://files.pythonhosted.org/packages/7f/83/0d8308c50b6100e438c89cbfe292d1d243edc1ac2a0eeb79da90351dbd51/git_cliff-2.9.1-py3-none-win32.whl", hash = "sha256:bd15d7a5b6c69546454fd5f89b091e6210fa9c24abc5c0d86c2662b7896ec55f", size = 6041354, upload-time = "2025-06-03T11:12:10.048Z" }, + { url = "https://files.pythonhosted.org/packages/73/09/2a9b5731ab7f8e9813c934177ed71e8d293618b54649e9566c2080d1652e/git_cliff-2.9.1-py3-none-win_amd64.whl", hash = "sha256:840f02dff8adcaecb3dd76bb01cea947633b71341cf42716965d3611f3f315d9", size = 6825745, upload-time = "2025-06-03T11:12:11.986Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httptools" +version = "0.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/9a/ce5e1f7e131522e6d3426e8e7a490b3a01f39a6696602e1c4f33f9e94277/httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", size = 240639, upload-time = "2024-10-16T19:45:08.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/6f/972f8eb0ea7d98a1c6be436e2142d51ad2a64ee18e02b0e7ff1f62171ab1/httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0", size = 198780, upload-time = "2024-10-16T19:44:06.882Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b0/17c672b4bc5c7ba7f201eada4e96c71d0a59fbc185e60e42580093a86f21/httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da", size = 103297, upload-time = "2024-10-16T19:44:08.129Z" }, + { url = "https://files.pythonhosted.org/packages/92/5e/b4a826fe91971a0b68e8c2bd4e7db3e7519882f5a8ccdb1194be2b3ab98f/httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1", size = 443130, upload-time = "2024-10-16T19:44:09.45Z" }, + { url = "https://files.pythonhosted.org/packages/b0/51/ce61e531e40289a681a463e1258fa1e05e0be54540e40d91d065a264cd8f/httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50", size = 442148, upload-time = "2024-10-16T19:44:11.539Z" }, + { url = "https://files.pythonhosted.org/packages/ea/9e/270b7d767849b0c96f275c695d27ca76c30671f8eb8cc1bab6ced5c5e1d0/httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959", size = 415949, upload-time = "2024-10-16T19:44:13.388Z" }, + { url = "https://files.pythonhosted.org/packages/81/86/ced96e3179c48c6f656354e106934e65c8963d48b69be78f355797f0e1b3/httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4", size = 417591, upload-time = "2024-10-16T19:44:15.258Z" }, + { url = "https://files.pythonhosted.org/packages/75/73/187a3f620ed3175364ddb56847d7a608a6fc42d551e133197098c0143eca/httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c", size = 88344, upload-time = "2024-10-16T19:44:16.54Z" }, + { url = "https://files.pythonhosted.org/packages/7b/26/bb526d4d14c2774fe07113ca1db7255737ffbb119315839af2065abfdac3/httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069", size = 199029, upload-time = "2024-10-16T19:44:18.427Z" }, + { url = "https://files.pythonhosted.org/packages/a6/17/3e0d3e9b901c732987a45f4f94d4e2c62b89a041d93db89eafb262afd8d5/httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a", size = 103492, upload-time = "2024-10-16T19:44:19.515Z" }, + { url = "https://files.pythonhosted.org/packages/b7/24/0fe235d7b69c42423c7698d086d4db96475f9b50b6ad26a718ef27a0bce6/httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975", size = 462891, upload-time = "2024-10-16T19:44:21.067Z" }, + { url = "https://files.pythonhosted.org/packages/b1/2f/205d1f2a190b72da6ffb5f41a3736c26d6fa7871101212b15e9b5cd8f61d/httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636", size = 459788, upload-time = "2024-10-16T19:44:22.958Z" }, + { url = "https://files.pythonhosted.org/packages/6e/4c/d09ce0eff09057a206a74575ae8f1e1e2f0364d20e2442224f9e6612c8b9/httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721", size = 433214, upload-time = "2024-10-16T19:44:24.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/84c9e23edbccc4a4c6f96a1b8d99dfd2350289e94f00e9ccc7aadde26fb5/httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988", size = 434120, upload-time = "2024-10-16T19:44:26.295Z" }, + { url = "https://files.pythonhosted.org/packages/d0/46/4d8e7ba9581416de1c425b8264e2cadd201eb709ec1584c381f3e98f51c1/httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17", size = 88565, upload-time = "2024-10-16T19:44:29.188Z" }, + { url = "https://files.pythonhosted.org/packages/bb/0e/d0b71465c66b9185f90a091ab36389a7352985fe857e352801c39d6127c8/httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2", size = 200683, upload-time = "2024-10-16T19:44:30.175Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b8/412a9bb28d0a8988de3296e01efa0bd62068b33856cdda47fe1b5e890954/httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44", size = 104337, upload-time = "2024-10-16T19:44:31.786Z" }, + { url = "https://files.pythonhosted.org/packages/9b/01/6fb20be3196ffdc8eeec4e653bc2a275eca7f36634c86302242c4fbb2760/httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1", size = 508796, upload-time = "2024-10-16T19:44:32.825Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d8/b644c44acc1368938317d76ac991c9bba1166311880bcc0ac297cb9d6bd7/httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2", size = 510837, upload-time = "2024-10-16T19:44:33.974Z" }, + { url = "https://files.pythonhosted.org/packages/52/d8/254d16a31d543073a0e57f1c329ca7378d8924e7e292eda72d0064987486/httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81", size = 485289, upload-time = "2024-10-16T19:44:35.111Z" }, + { url = "https://files.pythonhosted.org/packages/5f/3c/4aee161b4b7a971660b8be71a92c24d6c64372c1ab3ae7f366b3680df20f/httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", size = 489779, upload-time = "2024-10-16T19:44:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/12/b7/5cae71a8868e555f3f67a50ee7f673ce36eac970f029c0c5e9d584352961/httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970", size = 88634, upload-time = "2024-10-16T19:44:37.357Z" }, + { url = "https://files.pythonhosted.org/packages/94/a3/9fe9ad23fd35f7de6b91eeb60848986058bd8b5a5c1e256f5860a160cc3e/httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", size = 197214, upload-time = "2024-10-16T19:44:38.738Z" }, + { url = "https://files.pythonhosted.org/packages/ea/d9/82d5e68bab783b632023f2fa31db20bebb4e89dfc4d2293945fd68484ee4/httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", size = 102431, upload-time = "2024-10-16T19:44:39.818Z" }, + { url = "https://files.pythonhosted.org/packages/96/c1/cb499655cbdbfb57b577734fde02f6fa0bbc3fe9fb4d87b742b512908dff/httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", size = 473121, upload-time = "2024-10-16T19:44:41.189Z" }, + { url = "https://files.pythonhosted.org/packages/af/71/ee32fd358f8a3bb199b03261f10921716990808a675d8160b5383487a317/httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", size = 473805, upload-time = "2024-10-16T19:44:42.384Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0a/0d4df132bfca1507114198b766f1737d57580c9ad1cf93c1ff673e3387be/httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", size = 448858, upload-time = "2024-10-16T19:44:43.959Z" }, + { url = "https://files.pythonhosted.org/packages/1e/6a/787004fdef2cabea27bad1073bf6a33f2437b4dbd3b6fb4a9d71172b1c7c/httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", size = 452042, upload-time = "2024-10-16T19:44:45.071Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/7decab5c404d1d2cdc1bb330b1bf70e83d6af0396fd4fc76fc60c0d522bf/httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", size = 87682, upload-time = "2024-10-16T19:44:46.46Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/ec/81b536dc79faa796f341b9d6551dc250278b577b17e5193bd19eea938597/git_cliff-2.9.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:220620392ccd6c12a49f816baaea530c32d96b54fce0ebdb7b688b4ba38a0627", size = 6455305 }, - { url = "https://files.pythonhosted.org/packages/91/46/054f94b678d66bf56040b88ad496a7f7e89a83f0a5539f63a6552133d5f4/git_cliff-2.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f0790924301176bcf6cab274d4d8b791ffc6791a6541929c29a2c81a10ca0d82", size = 5982424 }, - { url = "https://files.pythonhosted.org/packages/0f/ac/9a393624c11e736ebed6f83e2b1a0e622d88315eaf51204192987adfe8cc/git_cliff-2.9.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74afc8b388f32f4661e81c758218578cd7fef36fcc60ffe035027f8eb7b9f9c6", size = 6351400 }, - { url = "https://files.pythonhosted.org/packages/51/67/0cdb7c20acebbe1c9c278cc5a4a8b119ccf765fb278cbb4a4a6a614115c3/git_cliff-2.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cee37c70b0ce28d39ad64bdc8eb9d09e415722fd040f61362c5a8c0a85a5161", size = 6805681 }, - { url = "https://files.pythonhosted.org/packages/4c/af/213d98b64d0b0bf63d4580f01ef2de521f06883dfdde8e292446e6b5db59/git_cliff-2.9.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:555493177f69b4471996f3a80c1f05c3203789080dde96c7b5a05f05aa3f7c49", size = 6410027 }, - { url = "https://files.pythonhosted.org/packages/33/64/3c995aeae2b94cce75faa7a86677aeaf157539733319739537f1fc163196/git_cliff-2.9.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:45dfefb7f4589fa73a8ae95bfadb233988f64098a08ecd3724334ae58121e004", size = 6584265 }, - { url = "https://files.pythonhosted.org/packages/96/bd/2843e660b7f5e28b6bc1001af2ca9a76887ea19bef0b6a2788566f443fc8/git_cliff-2.9.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:067a5112999bdb917dcd9cd4b195f32cb0fcd1a0161035f443c02a3536252727", size = 7037288 }, - { url = "https://files.pythonhosted.org/packages/7f/83/0d8308c50b6100e438c89cbfe292d1d243edc1ac2a0eeb79da90351dbd51/git_cliff-2.9.1-py3-none-win32.whl", hash = "sha256:bd15d7a5b6c69546454fd5f89b091e6210fa9c24abc5c0d86c2662b7896ec55f", size = 6041354 }, - { url = "https://files.pythonhosted.org/packages/73/09/2a9b5731ab7f8e9813c934177ed71e8d293618b54649e9566c2080d1652e/git_cliff-2.9.1-py3-none-win_amd64.whl", hash = "sha256:840f02dff8adcaecb3dd76bb01cea947633b71341cf42716965d3611f3f315d9", size = 6825745 }, + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, ] [[package]] name = "identify" version = "2.6.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload-time = "2025-05-23T20:37:53.3Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145 }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload-time = "2025-05-23T20:37:51.495Z" }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "imagesize" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, ] [[package]] @@ -431,9 +615,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] @@ -443,9 +627,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "uc-micro-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946 } +sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946, upload-time = "2024-02-04T14:48:04.179Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820 }, + { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820, upload-time = "2024-02-04T14:48:02.496Z" }, ] [[package]] @@ -456,15 +640,16 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, ] [[package]] name = "lydata" source = { editable = "." } dependencies = [ + { name = "fastapi", extra = ["standard"] }, { name = "loguru" }, { name = "mistletoe" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -474,6 +659,7 @@ dependencies = [ { name = "pydantic" }, { name = "pygithub" }, { name = "roman" }, + { name = "typer" }, ] [package.optional-dependencies] @@ -496,6 +682,7 @@ tests = [ [package.metadata] requires-dist = [ + { name = "fastapi", extras = ["standard"], specifier = ">=0.116.1" }, { name = "git-cliff", marker = "extra == 'dev'" }, { name = "loguru" }, { name = "mistletoe" }, @@ -512,6 +699,7 @@ requires-dist = [ { name = "sphinx", marker = "extra == 'docs'" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, { name = "sphinx-book-theme", marker = "extra == 'docs'" }, + { name = "typer", specifier = ">=0.16.0" }, ] provides-extras = ["docs", "tests", "dev"] @@ -522,67 +710,67 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, - { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, - { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, - { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, - { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, - { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, - { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, - { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, - { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, - { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, ] [[package]] @@ -592,36 +780,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542 } +sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542, upload-time = "2024-09-09T20:27:49.564Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316 }, + { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316, upload-time = "2024-09-09T20:27:48.397Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "mistletoe" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/96/ea46a376a7c4cd56955ecdfff0ea68de43996a4e6d1aee4599729453bd11/mistletoe-1.4.0.tar.gz", hash = "sha256:1630f906e5e4bbe66fdeb4d29d277e2ea515d642bb18a9b49b136361a9818c9d", size = 107203 } +sdist = { url = "https://files.pythonhosted.org/packages/11/96/ea46a376a7c4cd56955ecdfff0ea68de43996a4e6d1aee4599729453bd11/mistletoe-1.4.0.tar.gz", hash = "sha256:1630f906e5e4bbe66fdeb4d29d277e2ea515d642bb18a9b49b136361a9818c9d", size = 107203, upload-time = "2024-07-14T10:17:35.212Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/0f/b5e545f0c7962be90366af3418989b12cf441d9da1e5d89d88f2f3e5cf8f/mistletoe-1.4.0-py3-none-any.whl", hash = "sha256:44a477803861de1237ba22e375c6b617690a31d2902b47279d1f8f7ed498a794", size = 51304 }, + { url = "https://files.pythonhosted.org/packages/2a/0f/b5e545f0c7962be90366af3418989b12cf441d9da1e5d89d88f2f3e5cf8f/mistletoe-1.4.0-py3-none-any.whl", hash = "sha256:44a477803861de1237ba22e375c6b617690a31d2902b47279d1f8f7ed498a794", size = 51304, upload-time = "2024-07-14T10:17:33.243Z" }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] [[package]] @@ -637,9 +825,9 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985 } +sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579 }, + { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579, upload-time = "2025-02-12T10:53:02.078Z" }, ] [package.optional-dependencies] @@ -651,9 +839,9 @@ linkify = [ name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, ] [[package]] @@ -663,62 +851,62 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, ] [[package]] @@ -729,67 +917,67 @@ resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5f/df67435257d827eb3b8af66f585223dc2c3f2eb7ad0b50cb1dae2f35f494/numpy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3c9fdde0fa18afa1099d6257eb82890ea4f3102847e692193b54e00312a9ae9", size = 21199688 }, - { url = "https://files.pythonhosted.org/packages/e5/ce/aad219575055d6c9ef29c8c540c81e1c38815d3be1fe09cdbe53d48ee838/numpy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46d16f72c2192da7b83984aa5455baee640e33a9f1e61e656f29adf55e406c2b", size = 14359277 }, - { url = "https://files.pythonhosted.org/packages/29/6b/2d31da8e6d2ec99bed54c185337a87f8fbeccc1cd9804e38217e92f3f5e2/numpy-2.3.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a0be278be9307c4ab06b788f2a077f05e180aea817b3e41cebbd5aaf7bd85ed3", size = 5376069 }, - { url = "https://files.pythonhosted.org/packages/7d/2a/6c59a062397553ec7045c53d5fcdad44e4536e54972faa2ba44153bca984/numpy-2.3.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:99224862d1412d2562248d4710126355d3a8db7672170a39d6909ac47687a8a4", size = 6913057 }, - { url = "https://files.pythonhosted.org/packages/d5/5a/8df16f258d28d033e4f359e29d3aeb54663243ac7b71504e89deeb813202/numpy-2.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2393a914db64b0ead0ab80c962e42d09d5f385802006a6c87835acb1f58adb96", size = 14568083 }, - { url = "https://files.pythonhosted.org/packages/0a/92/0528a563dfc2cdccdcb208c0e241a4bb500d7cde218651ffb834e8febc50/numpy-2.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7729c8008d55e80784bd113787ce876ca117185c579c0d626f59b87d433ea779", size = 16929402 }, - { url = "https://files.pythonhosted.org/packages/e4/2f/e7a8c8d4a2212c527568d84f31587012cf5497a7271ea1f23332142f634e/numpy-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:06d4fb37a8d383b769281714897420c5cc3545c79dc427df57fc9b852ee0bf58", size = 15879193 }, - { url = "https://files.pythonhosted.org/packages/e2/c3/dada3f005953847fe35f42ac0fe746f6e1ea90b4c6775e4be605dcd7b578/numpy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c39ec392b5db5088259c68250e342612db82dc80ce044cf16496cf14cf6bc6f8", size = 18665318 }, - { url = "https://files.pythonhosted.org/packages/3b/ae/3f448517dedefc8dd64d803f9d51a8904a48df730e00a3c5fb1e75a60620/numpy-2.3.0-cp311-cp311-win32.whl", hash = "sha256:ee9d3ee70d62827bc91f3ea5eee33153212c41f639918550ac0475e3588da59f", size = 6601108 }, - { url = "https://files.pythonhosted.org/packages/8c/4a/556406d2bb2b9874c8cbc840c962683ac28f21efbc9b01177d78f0199ca1/numpy-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:43c55b6a860b0eb44d42341438b03513cf3879cb3617afb749ad49307e164edd", size = 13021525 }, - { url = "https://files.pythonhosted.org/packages/ed/ee/bf54278aef30335ffa9a189f869ea09e1a195b3f4b93062164a3b02678a7/numpy-2.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2e6a1409eee0cb0316cb64640a49a49ca44deb1a537e6b1121dc7c458a1299a8", size = 10170327 }, - { url = "https://files.pythonhosted.org/packages/89/59/9df493df81ac6f76e9f05cdbe013cdb0c9a37b434f6e594f5bd25e278908/numpy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:389b85335838155a9076e9ad7f8fdba0827496ec2d2dc32ce69ce7898bde03ba", size = 20897025 }, - { url = "https://files.pythonhosted.org/packages/2f/86/4ff04335901d6cf3a6bb9c748b0097546ae5af35e455ae9b962ebff4ecd7/numpy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9498f60cd6bb8238d8eaf468a3d5bb031d34cd12556af53510f05fcf581c1b7e", size = 14129882 }, - { url = "https://files.pythonhosted.org/packages/71/8d/a942cd4f959de7f08a79ab0c7e6cecb7431d5403dce78959a726f0f57aa1/numpy-2.3.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:622a65d40d8eb427d8e722fd410ac3ad4958002f109230bc714fa551044ebae2", size = 5110181 }, - { url = "https://files.pythonhosted.org/packages/86/5d/45850982efc7b2c839c5626fb67fbbc520d5b0d7c1ba1ae3651f2f74c296/numpy-2.3.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b9446d9d8505aadadb686d51d838f2b6688c9e85636a0c3abaeb55ed54756459", size = 6647581 }, - { url = "https://files.pythonhosted.org/packages/1a/c0/c871d4a83f93b00373d3eebe4b01525eee8ef10b623a335ec262b58f4dc1/numpy-2.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:50080245365d75137a2bf46151e975de63146ae6d79f7e6bd5c0e85c9931d06a", size = 14262317 }, - { url = "https://files.pythonhosted.org/packages/b7/f6/bc47f5fa666d5ff4145254f9e618d56e6a4ef9b874654ca74c19113bb538/numpy-2.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c24bb4113c66936eeaa0dc1e47c74770453d34f46ee07ae4efd853a2ed1ad10a", size = 16633919 }, - { url = "https://files.pythonhosted.org/packages/f5/b4/65f48009ca0c9b76df5f404fccdea5a985a1bb2e34e97f21a17d9ad1a4ba/numpy-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d294287fdf685281e671886c6dcdf0291a7c19db3e5cb4178d07ccf6ecc67", size = 15567651 }, - { url = "https://files.pythonhosted.org/packages/f1/62/5367855a2018578e9334ed08252ef67cc302e53edc869666f71641cad40b/numpy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6295f81f093b7f5769d1728a6bd8bf7466de2adfa771ede944ce6711382b89dc", size = 18361723 }, - { url = "https://files.pythonhosted.org/packages/d4/75/5baed8cd867eabee8aad1e74d7197d73971d6a3d40c821f1848b8fab8b84/numpy-2.3.0-cp312-cp312-win32.whl", hash = "sha256:e6648078bdd974ef5d15cecc31b0c410e2e24178a6e10bf511e0557eed0f2570", size = 6318285 }, - { url = "https://files.pythonhosted.org/packages/bc/49/d5781eaa1a15acb3b3a3f49dc9e2ff18d92d0ce5c2976f4ab5c0a7360250/numpy-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:0898c67a58cdaaf29994bc0e2c65230fd4de0ac40afaf1584ed0b02cd74c6fdd", size = 12732594 }, - { url = "https://files.pythonhosted.org/packages/c2/1c/6d343e030815c7c97a1f9fbad00211b47717c7fe446834c224bd5311e6f1/numpy-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:bd8df082b6c4695753ad6193018c05aac465d634834dca47a3ae06d4bb22d9ea", size = 9891498 }, - { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633 }, - { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683 }, - { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683 }, - { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253 }, - { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658 }, - { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765 }, - { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335 }, - { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608 }, - { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005 }, - { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093 }, - { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689 }, - { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612 }, - { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953 }, - { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806 }, - { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169 }, - { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701 }, - { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983 }, - { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798 }, - { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632 }, - { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491 }, - { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 }, - { url = "https://files.pythonhosted.org/packages/6a/a2/f8c1133f90eaa1c11bbbec1dc28a42054d0ce74bc2c9838c5437ba5d4980/numpy-2.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80b46117c7359de8167cc00a2c7d823bdd505e8c7727ae0871025a86d668283b", size = 21070759 }, - { url = "https://files.pythonhosted.org/packages/6c/e0/4c05fc44ba28463096eee5ae2a12832c8d2759cc5bcec34ae33386d3ff83/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:5814a0f43e70c061f47abd5857d120179609ddc32a613138cbb6c4e9e2dbdda5", size = 5301054 }, - { url = "https://files.pythonhosted.org/packages/8a/3b/6c06cdebe922bbc2a466fe2105f50f661238ea223972a69c7deb823821e7/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ef6c1e88fd6b81ac6d215ed71dc8cd027e54d4bf1d2682d362449097156267a2", size = 6817520 }, - { url = "https://files.pythonhosted.org/packages/9d/a3/1e536797fd10eb3c5dbd2e376671667c9af19e241843548575267242ea02/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33a5a12a45bb82d9997e2c0b12adae97507ad7c347546190a18ff14c28bbca12", size = 14398078 }, - { url = "https://files.pythonhosted.org/packages/7c/61/9d574b10d9368ecb1a0c923952aa593510a20df4940aa615b3a71337c8db/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:54dfc8681c1906d239e95ab1508d0a533c4a9505e52ee2d71a5472b04437ef97", size = 16751324 }, - { url = "https://files.pythonhosted.org/packages/39/de/bcad52ce972dc26232629ca3a99721fd4b22c1d2bda84d5db6541913ef9c/numpy-2.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e017a8a251ff4d18d71f139e28bdc7c31edba7a507f72b1414ed902cbe48c74d", size = 12924237 }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813, upload-time = "2025-06-07T14:54:32.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5f/df67435257d827eb3b8af66f585223dc2c3f2eb7ad0b50cb1dae2f35f494/numpy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3c9fdde0fa18afa1099d6257eb82890ea4f3102847e692193b54e00312a9ae9", size = 21199688, upload-time = "2025-06-07T14:36:52.067Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ce/aad219575055d6c9ef29c8c540c81e1c38815d3be1fe09cdbe53d48ee838/numpy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46d16f72c2192da7b83984aa5455baee640e33a9f1e61e656f29adf55e406c2b", size = 14359277, upload-time = "2025-06-07T14:37:15.325Z" }, + { url = "https://files.pythonhosted.org/packages/29/6b/2d31da8e6d2ec99bed54c185337a87f8fbeccc1cd9804e38217e92f3f5e2/numpy-2.3.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a0be278be9307c4ab06b788f2a077f05e180aea817b3e41cebbd5aaf7bd85ed3", size = 5376069, upload-time = "2025-06-07T14:37:25.636Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2a/6c59a062397553ec7045c53d5fcdad44e4536e54972faa2ba44153bca984/numpy-2.3.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:99224862d1412d2562248d4710126355d3a8db7672170a39d6909ac47687a8a4", size = 6913057, upload-time = "2025-06-07T14:37:37.215Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5a/8df16f258d28d033e4f359e29d3aeb54663243ac7b71504e89deeb813202/numpy-2.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2393a914db64b0ead0ab80c962e42d09d5f385802006a6c87835acb1f58adb96", size = 14568083, upload-time = "2025-06-07T14:37:59.337Z" }, + { url = "https://files.pythonhosted.org/packages/0a/92/0528a563dfc2cdccdcb208c0e241a4bb500d7cde218651ffb834e8febc50/numpy-2.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7729c8008d55e80784bd113787ce876ca117185c579c0d626f59b87d433ea779", size = 16929402, upload-time = "2025-06-07T14:38:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/e4/2f/e7a8c8d4a2212c527568d84f31587012cf5497a7271ea1f23332142f634e/numpy-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:06d4fb37a8d383b769281714897420c5cc3545c79dc427df57fc9b852ee0bf58", size = 15879193, upload-time = "2025-06-07T14:38:48.007Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c3/dada3f005953847fe35f42ac0fe746f6e1ea90b4c6775e4be605dcd7b578/numpy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c39ec392b5db5088259c68250e342612db82dc80ce044cf16496cf14cf6bc6f8", size = 18665318, upload-time = "2025-06-07T14:39:15.794Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ae/3f448517dedefc8dd64d803f9d51a8904a48df730e00a3c5fb1e75a60620/numpy-2.3.0-cp311-cp311-win32.whl", hash = "sha256:ee9d3ee70d62827bc91f3ea5eee33153212c41f639918550ac0475e3588da59f", size = 6601108, upload-time = "2025-06-07T14:39:27.176Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4a/556406d2bb2b9874c8cbc840c962683ac28f21efbc9b01177d78f0199ca1/numpy-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:43c55b6a860b0eb44d42341438b03513cf3879cb3617afb749ad49307e164edd", size = 13021525, upload-time = "2025-06-07T14:39:46.637Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ee/bf54278aef30335ffa9a189f869ea09e1a195b3f4b93062164a3b02678a7/numpy-2.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2e6a1409eee0cb0316cb64640a49a49ca44deb1a537e6b1121dc7c458a1299a8", size = 10170327, upload-time = "2025-06-07T14:40:02.703Z" }, + { url = "https://files.pythonhosted.org/packages/89/59/9df493df81ac6f76e9f05cdbe013cdb0c9a37b434f6e594f5bd25e278908/numpy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:389b85335838155a9076e9ad7f8fdba0827496ec2d2dc32ce69ce7898bde03ba", size = 20897025, upload-time = "2025-06-07T14:40:33.558Z" }, + { url = "https://files.pythonhosted.org/packages/2f/86/4ff04335901d6cf3a6bb9c748b0097546ae5af35e455ae9b962ebff4ecd7/numpy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9498f60cd6bb8238d8eaf468a3d5bb031d34cd12556af53510f05fcf581c1b7e", size = 14129882, upload-time = "2025-06-07T14:40:55.034Z" }, + { url = "https://files.pythonhosted.org/packages/71/8d/a942cd4f959de7f08a79ab0c7e6cecb7431d5403dce78959a726f0f57aa1/numpy-2.3.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:622a65d40d8eb427d8e722fd410ac3ad4958002f109230bc714fa551044ebae2", size = 5110181, upload-time = "2025-06-07T14:41:04.4Z" }, + { url = "https://files.pythonhosted.org/packages/86/5d/45850982efc7b2c839c5626fb67fbbc520d5b0d7c1ba1ae3651f2f74c296/numpy-2.3.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b9446d9d8505aadadb686d51d838f2b6688c9e85636a0c3abaeb55ed54756459", size = 6647581, upload-time = "2025-06-07T14:41:14.695Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c0/c871d4a83f93b00373d3eebe4b01525eee8ef10b623a335ec262b58f4dc1/numpy-2.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:50080245365d75137a2bf46151e975de63146ae6d79f7e6bd5c0e85c9931d06a", size = 14262317, upload-time = "2025-06-07T14:41:35.862Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f6/bc47f5fa666d5ff4145254f9e618d56e6a4ef9b874654ca74c19113bb538/numpy-2.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c24bb4113c66936eeaa0dc1e47c74770453d34f46ee07ae4efd853a2ed1ad10a", size = 16633919, upload-time = "2025-06-07T14:42:00.622Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b4/65f48009ca0c9b76df5f404fccdea5a985a1bb2e34e97f21a17d9ad1a4ba/numpy-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d294287fdf685281e671886c6dcdf0291a7c19db3e5cb4178d07ccf6ecc67", size = 15567651, upload-time = "2025-06-07T14:42:24.429Z" }, + { url = "https://files.pythonhosted.org/packages/f1/62/5367855a2018578e9334ed08252ef67cc302e53edc869666f71641cad40b/numpy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6295f81f093b7f5769d1728a6bd8bf7466de2adfa771ede944ce6711382b89dc", size = 18361723, upload-time = "2025-06-07T14:42:51.167Z" }, + { url = "https://files.pythonhosted.org/packages/d4/75/5baed8cd867eabee8aad1e74d7197d73971d6a3d40c821f1848b8fab8b84/numpy-2.3.0-cp312-cp312-win32.whl", hash = "sha256:e6648078bdd974ef5d15cecc31b0c410e2e24178a6e10bf511e0557eed0f2570", size = 6318285, upload-time = "2025-06-07T14:43:02.052Z" }, + { url = "https://files.pythonhosted.org/packages/bc/49/d5781eaa1a15acb3b3a3f49dc9e2ff18d92d0ce5c2976f4ab5c0a7360250/numpy-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:0898c67a58cdaaf29994bc0e2c65230fd4de0ac40afaf1584ed0b02cd74c6fdd", size = 12732594, upload-time = "2025-06-07T14:43:21.071Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1c/6d343e030815c7c97a1f9fbad00211b47717c7fe446834c224bd5311e6f1/numpy-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:bd8df082b6c4695753ad6193018c05aac465d634834dca47a3ae06d4bb22d9ea", size = 9891498, upload-time = "2025-06-07T14:43:36.332Z" }, + { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633, upload-time = "2025-06-07T14:44:06.839Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683, upload-time = "2025-06-07T14:44:28.847Z" }, + { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683, upload-time = "2025-06-07T14:44:38.417Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253, upload-time = "2025-06-07T14:44:49.359Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658, upload-time = "2025-06-07T14:45:10.156Z" }, + { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765, upload-time = "2025-06-07T14:45:35.076Z" }, + { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335, upload-time = "2025-06-07T14:45:58.797Z" }, + { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608, upload-time = "2025-06-07T14:46:25.687Z" }, + { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005, upload-time = "2025-06-07T14:50:13.138Z" }, + { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093, upload-time = "2025-06-07T14:50:31.82Z" }, + { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689, upload-time = "2025-06-07T14:50:47.888Z" }, + { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612, upload-time = "2025-06-07T14:46:56.077Z" }, + { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953, upload-time = "2025-06-07T14:47:18.053Z" }, + { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806, upload-time = "2025-06-07T14:47:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169, upload-time = "2025-06-07T14:47:38.057Z" }, + { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701, upload-time = "2025-06-07T14:47:59.113Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983, upload-time = "2025-06-07T14:48:24.196Z" }, + { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435, upload-time = "2025-06-07T14:48:47.712Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798, upload-time = "2025-06-07T14:49:14.866Z" }, + { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632, upload-time = "2025-06-07T14:49:25.67Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491, upload-time = "2025-06-07T14:49:44.898Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345, upload-time = "2025-06-07T14:50:02.311Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a2/f8c1133f90eaa1c11bbbec1dc28a42054d0ce74bc2c9838c5437ba5d4980/numpy-2.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80b46117c7359de8167cc00a2c7d823bdd505e8c7727ae0871025a86d668283b", size = 21070759, upload-time = "2025-06-07T14:51:18.241Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e0/4c05fc44ba28463096eee5ae2a12832c8d2759cc5bcec34ae33386d3ff83/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:5814a0f43e70c061f47abd5857d120179609ddc32a613138cbb6c4e9e2dbdda5", size = 5301054, upload-time = "2025-06-07T14:51:27.413Z" }, + { url = "https://files.pythonhosted.org/packages/8a/3b/6c06cdebe922bbc2a466fe2105f50f661238ea223972a69c7deb823821e7/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ef6c1e88fd6b81ac6d215ed71dc8cd027e54d4bf1d2682d362449097156267a2", size = 6817520, upload-time = "2025-06-07T14:51:38.015Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a3/1e536797fd10eb3c5dbd2e376671667c9af19e241843548575267242ea02/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33a5a12a45bb82d9997e2c0b12adae97507ad7c347546190a18ff14c28bbca12", size = 14398078, upload-time = "2025-06-07T14:52:00.122Z" }, + { url = "https://files.pythonhosted.org/packages/7c/61/9d574b10d9368ecb1a0c923952aa593510a20df4940aa615b3a71337c8db/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:54dfc8681c1906d239e95ab1508d0a533c4a9505e52ee2d71a5472b04437ef97", size = 16751324, upload-time = "2025-06-07T14:52:25.077Z" }, + { url = "https://files.pythonhosted.org/packages/39/de/bcad52ce972dc26232629ca3a99721fd4b22c1d2bda84d5db6541913ef9c/numpy-2.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e017a8a251ff4d18d71f139e28bdc7c31edba7a507f72b1414ed902cbe48c74d", size = 12924237, upload-time = "2025-06-07T14:52:44.713Z" }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] @@ -803,42 +991,42 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531 }, - { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764 }, - { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963 }, - { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446 }, - { url = "https://files.pythonhosted.org/packages/f7/fc/17851e1b1ea0c8456ba90a2f514c35134dd56d981cf30ccdc501a0adeac4/pandas-2.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", size = 12920002 }, - { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218 }, - { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485 }, - { url = "https://files.pythonhosted.org/packages/96/1e/ba313812a699fe37bf62e6194265a4621be11833f5fce46d9eae22acb5d7/pandas-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", size = 11551836 }, - { url = "https://files.pythonhosted.org/packages/1b/cc/0af9c07f8d714ea563b12383a7e5bde9479cf32413ee2f346a9c5a801f22/pandas-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef", size = 10807977 }, - { url = "https://files.pythonhosted.org/packages/ee/3e/8c0fb7e2cf4a55198466ced1ca6a9054ae3b7e7630df7757031df10001fd/pandas-2.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d", size = 11788230 }, - { url = "https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", size = 12370423 }, - { url = "https://files.pythonhosted.org/packages/9f/74/b012addb34cda5ce855218a37b258c4e056a0b9b334d116e518d72638737/pandas-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33", size = 12990594 }, - { url = "https://files.pythonhosted.org/packages/95/81/b310e60d033ab64b08e66c635b94076488f0b6ce6a674379dd5b224fc51c/pandas-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", size = 13745952 }, - { url = "https://files.pythonhosted.org/packages/25/ac/f6ee5250a8881b55bd3aecde9b8cfddea2f2b43e3588bca68a4e9aaf46c8/pandas-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", size = 11094534 }, - { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865 }, - { url = "https://files.pythonhosted.org/packages/9f/cc/ae8ea3b800757a70c9fdccc68b67dc0280a6e814efcf74e4211fd5dea1ca/pandas-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", size = 10702154 }, - { url = "https://files.pythonhosted.org/packages/d8/ba/a7883d7aab3d24c6540a2768f679e7414582cc389876d469b40ec749d78b/pandas-2.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", size = 11262180 }, - { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493 }, - { url = "https://files.pythonhosted.org/packages/d7/bf/0213986830a92d44d55153c1d69b509431a972eb73f204242988c4e66e86/pandas-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", size = 12470733 }, - { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406 }, - { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199 }, - { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913 }, - { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249 }, - { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359 }, - { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789 }, - { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734 }, - { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381 }, - { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135 }, - { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356 }, - { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674 }, - { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876 }, - { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182 }, - { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686 }, - { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, +sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531, upload-time = "2025-06-05T03:25:48.648Z" }, + { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764, upload-time = "2025-06-05T03:25:53.228Z" }, + { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963, upload-time = "2025-06-05T03:25:56.855Z" }, + { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446, upload-time = "2025-06-05T03:26:01.292Z" }, + { url = "https://files.pythonhosted.org/packages/f7/fc/17851e1b1ea0c8456ba90a2f514c35134dd56d981cf30ccdc501a0adeac4/pandas-2.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", size = 12920002, upload-time = "2025-06-06T00:00:07.925Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218, upload-time = "2025-06-05T03:26:09.731Z" }, + { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485, upload-time = "2025-06-05T03:26:17.572Z" }, + { url = "https://files.pythonhosted.org/packages/96/1e/ba313812a699fe37bf62e6194265a4621be11833f5fce46d9eae22acb5d7/pandas-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", size = 11551836, upload-time = "2025-06-05T03:26:22.784Z" }, + { url = "https://files.pythonhosted.org/packages/1b/cc/0af9c07f8d714ea563b12383a7e5bde9479cf32413ee2f346a9c5a801f22/pandas-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef", size = 10807977, upload-time = "2025-06-05T16:50:11.109Z" }, + { url = "https://files.pythonhosted.org/packages/ee/3e/8c0fb7e2cf4a55198466ced1ca6a9054ae3b7e7630df7757031df10001fd/pandas-2.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d", size = 11788230, upload-time = "2025-06-05T03:26:27.417Z" }, + { url = "https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", size = 12370423, upload-time = "2025-06-05T03:26:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/9f/74/b012addb34cda5ce855218a37b258c4e056a0b9b334d116e518d72638737/pandas-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33", size = 12990594, upload-time = "2025-06-06T00:00:13.934Z" }, + { url = "https://files.pythonhosted.org/packages/95/81/b310e60d033ab64b08e66c635b94076488f0b6ce6a674379dd5b224fc51c/pandas-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", size = 13745952, upload-time = "2025-06-05T03:26:39.475Z" }, + { url = "https://files.pythonhosted.org/packages/25/ac/f6ee5250a8881b55bd3aecde9b8cfddea2f2b43e3588bca68a4e9aaf46c8/pandas-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", size = 11094534, upload-time = "2025-06-05T03:26:43.23Z" }, + { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865, upload-time = "2025-06-05T03:26:46.774Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cc/ae8ea3b800757a70c9fdccc68b67dc0280a6e814efcf74e4211fd5dea1ca/pandas-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", size = 10702154, upload-time = "2025-06-05T16:50:14.439Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ba/a7883d7aab3d24c6540a2768f679e7414582cc389876d469b40ec749d78b/pandas-2.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", size = 11262180, upload-time = "2025-06-05T16:50:17.453Z" }, + { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493, upload-time = "2025-06-05T03:26:51.813Z" }, + { url = "https://files.pythonhosted.org/packages/d7/bf/0213986830a92d44d55153c1d69b509431a972eb73f204242988c4e66e86/pandas-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", size = 12470733, upload-time = "2025-06-06T00:00:18.651Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406, upload-time = "2025-06-05T03:26:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199, upload-time = "2025-06-05T03:26:59.594Z" }, + { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913, upload-time = "2025-06-05T03:27:02.757Z" }, + { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249, upload-time = "2025-06-05T16:50:20.17Z" }, + { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359, upload-time = "2025-06-05T03:27:06.431Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789, upload-time = "2025-06-05T03:27:09.875Z" }, + { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734, upload-time = "2025-06-06T00:00:22.246Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381, upload-time = "2025-06-05T03:27:15.641Z" }, + { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135, upload-time = "2025-06-05T03:27:24.131Z" }, + { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356, upload-time = "2025-06-05T03:27:34.547Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674, upload-time = "2025-06-05T03:27:39.448Z" }, + { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876, upload-time = "2025-06-05T03:27:43.652Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182, upload-time = "2025-06-05T03:27:47.652Z" }, + { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686, upload-time = "2025-06-06T00:00:26.142Z" }, + { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847, upload-time = "2025-06-05T03:27:51.465Z" }, ] [[package]] @@ -852,27 +1040,27 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspect" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/4e/9eaf279c32058839361085faf203d728967d0fe1d6229dd989139bdb34e0/pandera-0.24.0.tar.gz", hash = "sha256:154231780643bc73b121bd976b0ada9dcebb3e065c622954fd099dc299cf44bd", size = 513238 } +sdist = { url = "https://files.pythonhosted.org/packages/47/4e/9eaf279c32058839361085faf203d728967d0fe1d6229dd989139bdb34e0/pandera-0.24.0.tar.gz", hash = "sha256:154231780643bc73b121bd976b0ada9dcebb3e065c622954fd099dc299cf44bd", size = 513238, upload-time = "2025-05-15T14:08:47.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/4d/ec550fbb5fe09a7c0a93a3f9b2d87446f728c1ef052f786b195eb4620def/pandera-0.24.0-py3-none-any.whl", hash = "sha256:3b7de575b43a4aa03a1561802be4ee0c7471e49153684fe327f7bbea0724b02b", size = 267092 }, + { url = "https://files.pythonhosted.org/packages/e9/4d/ec550fbb5fe09a7c0a93a3f9b2d87446f728c1ef052f786b195eb4620def/pandera-0.24.0-py3-none-any.whl", hash = "sha256:3b7de575b43a4aa03a1561802be4ee0c7471e49153684fe327f7bbea0724b02b", size = 267092, upload-time = "2025-05-15T14:08:45.77Z" }, ] [[package]] name = "platformdirs" version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] @@ -886,18 +1074,18 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424 } +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload-time = "2025-03-18T21:35:20.987Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload-time = "2025-03-18T21:35:19.343Z" }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, ] [[package]] @@ -910,9 +1098,14 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, ] [[package]] @@ -922,84 +1115,84 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817 }, - { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357 }, - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011 }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730 }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178 }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462 }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652 }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306 }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720 }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915 }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884 }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496 }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019 }, - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584 }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071 }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823 }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792 }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338 }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998 }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200 }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890 }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359 }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883 }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074 }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538 }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909 }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786 }, - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, - { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982 }, - { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412 }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749 }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527 }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225 }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490 }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525 }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446 }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678 }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200 }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123 }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852 }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484 }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896 }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475 }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013 }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715 }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757 }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" }, + { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" }, + { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, + { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, + { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, + { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, + { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, + { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, + { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, + { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, + { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" }, + { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" }, + { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, + { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, + { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, + { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, ] [[package]] @@ -1017,9 +1210,9 @@ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/67/ea/3ab478cccacc2e8ef69892c42c44ae547bae089f356c4b47caf61730958d/pydata_sphinx_theme-0.15.4.tar.gz", hash = "sha256:7762ec0ac59df3acecf49fd2f889e1b4565dbce8b88b2e29ee06fdd90645a06d", size = 2400673 } +sdist = { url = "https://files.pythonhosted.org/packages/67/ea/3ab478cccacc2e8ef69892c42c44ae547bae089f356c4b47caf61730958d/pydata_sphinx_theme-0.15.4.tar.gz", hash = "sha256:7762ec0ac59df3acecf49fd2f889e1b4565dbce8b88b2e29ee06fdd90645a06d", size = 2400673, upload-time = "2024-06-25T19:28:45.041Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl", hash = "sha256:2136ad0e9500d0949f96167e63f3e298620040aea8f9c74621959eda5d4cf8e6", size = 4640157 }, + { url = "https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl", hash = "sha256:2136ad0e9500d0949f96167e63f3e298620040aea8f9c74621959eda5d4cf8e6", size = 4640157, upload-time = "2024-06-25T19:28:42.383Z" }, ] [[package]] @@ -1034,27 +1227,27 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/88/e08ab18dc74b2916f48703ed1a797d57cb64eca0e23b0a9254e13cfe3911/pygithub-2.6.1.tar.gz", hash = "sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf", size = 3659473 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/88/e08ab18dc74b2916f48703ed1a797d57cb64eca0e23b0a9254e13cfe3911/pygithub-2.6.1.tar.gz", hash = "sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf", size = 3659473, upload-time = "2025-02-21T13:45:58.262Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl", hash = "sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3", size = 410451 }, + { url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl", hash = "sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3", size = 410451, upload-time = "2025-02-21T13:45:55.519Z" }, ] [[package]] name = "pygments" version = "2.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, ] [[package]] name = "pyjwt" version = "2.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, ] [package.optional-dependencies] @@ -1069,17 +1262,17 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854, upload-time = "2022-01-07T22:05:41.134Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920 }, - { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722 }, - { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087 }, - { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678 }, - { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660 }, - { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824 }, - { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912 }, - { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624 }, - { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141 }, + { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920, upload-time = "2022-01-07T22:05:49.156Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722, upload-time = "2022-01-07T22:05:50.989Z" }, + { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087, upload-time = "2022-01-07T22:05:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678, upload-time = "2022-01-07T22:05:54.251Z" }, + { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660, upload-time = "2022-01-07T22:05:56.056Z" }, + { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824, upload-time = "2022-01-07T22:05:57.434Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912, upload-time = "2022-01-07T22:05:58.665Z" }, + { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624, upload-time = "2022-01-07T22:06:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload-time = "2022-01-07T22:06:01.861Z" }, ] [[package]] @@ -1095,9 +1288,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714 } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474 }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, ] [[package]] @@ -1109,9 +1302,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432 } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644 }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, ] [[package]] @@ -1121,62 +1314,80 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" }, ] [[package]] name = "pytz" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, ] [[package]] @@ -1189,54 +1400,206 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, +] + +[[package]] +name = "rich" +version = "14.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, +] + +[[package]] +name = "rich-toolkit" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/36/cdb3d51371ad0cccbf1541506304783bd72d55790709b8eb68c0d401a13a/rich_toolkit-0.15.0.tar.gz", hash = "sha256:3f5730e9f2d36d0bfe01cf723948b7ecf4cc355d2b71e2c00e094f7963128c09", size = 115118, upload-time = "2025-08-11T10:55:37.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/e4/b0794eefb3cf78566b15e5bf576492c1d4a92ce5f6da55675bc11e9ef5d8/rich_toolkit-0.15.0-py3-none-any.whl", hash = "sha256:ddb91008283d4a7989fd8ff0324a48773a7a2276229c6a3070755645538ef1bb", size = 29062, upload-time = "2025-08-11T10:55:37.152Z" }, +] + +[[package]] +name = "rignore" +version = "0.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/46/05a94dc55ac03cf931d18e43b86ecee5ee054cb88b7853fffd741e35009c/rignore-0.6.4.tar.gz", hash = "sha256:e893fdd2d7fdcfa9407d0b7600ef2c2e2df97f55e1c45d4a8f54364829ddb0ab", size = 11633, upload-time = "2025-07-19T19:24:46.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/27/55ec2871e42c0a01669f7741598a5948f04bd32f3975478a0bead9e7e251/rignore-0.6.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c201375cfe76e56e61fcdfe50d0882aafb49544b424bfc828e0508dc9fbc431b", size = 888088, upload-time = "2025-07-19T19:23:50.776Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/6be3d7adf91f7d67f08833a29dea4f7c345554b385f9a797c397f6685f29/rignore-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4962d537e377394292c4828e1e9c620618dd8daa49ba746abe533733a89f8644", size = 824159, upload-time = "2025-07-19T19:23:44.395Z" }, + { url = "https://files.pythonhosted.org/packages/99/b7/fbb56b8cfa27971f9a19e87769dae0cb648343226eddda94ded32be2afc3/rignore-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a6dd2f213cff6ca3c4d257fa3f5b0c7d4f6c23fe83bf292425fbe8d0c9c908a", size = 892493, upload-time = "2025-07-19T19:22:32.061Z" }, + { url = "https://files.pythonhosted.org/packages/d5/cf/21f130801c29c1fcf22f00a41d7530cef576819ee1a26c86bdb7bb06a0f2/rignore-0.6.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:64d379193f86a21fc93762783f36651927f54d5eea54c4922fdccb5e37076ed2", size = 872810, upload-time = "2025-07-19T19:22:45.554Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4a/474a627263ef13a0ac28a0ce3a20932fbe41f6043f7280da47c7aca1f586/rignore-0.6.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53c4f8682cf645b7a9160e0f1786af3201ed54a020bb4abd515c970043387127", size = 1160488, upload-time = "2025-07-19T19:22:58.359Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c7/a10c180f77cbb456ab483c28e52efd6166cee787f11d21cb1d369b89e961/rignore-0.6.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af1246e672bd835a17d3ae91579b3c235ec55b10924ef22608d3e9ec90fa2699", size = 938780, upload-time = "2025-07-19T19:23:10.604Z" }, + { url = "https://files.pythonhosted.org/packages/32/68/8e67701e8cc9f157f12b3742e14f14e395c7f3a497720c7f6aab7e5cdec4/rignore-0.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82eed48fbc3097af418862e3c5c26fa81aa993e0d8b5f3a0a9a29cc6975eedff", size = 950347, upload-time = "2025-07-19T19:23:33.759Z" }, + { url = "https://files.pythonhosted.org/packages/1e/11/8eef123a2d029ed697b119806a0ca8a99d9457500c40b4d26cd21860eb89/rignore-0.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df1215a071d42fd857fb6363c13803fbd915d48eaeaa9b103fb2266ba89c8995", size = 976679, upload-time = "2025-07-19T19:23:23.813Z" }, + { url = "https://files.pythonhosted.org/packages/09/7e/9584f4e4b3c1587ae09f286a14dab2376895d782be632289d151cb952432/rignore-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:82f2d318e66756066ed664015d8ca720078ab1d319377f1f61e3f4d01325faea", size = 1067469, upload-time = "2025-07-19T19:23:57.616Z" }, + { url = "https://files.pythonhosted.org/packages/c3/2c/d3515693b89c47761822219bb519cefd0cd45a38ff82c35a4ccdd8e95deb/rignore-0.6.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e7d4258fc81051097c4d4c6ad17f0100c40088dbd2c6c31fc3c888a1d5a16190", size = 1136199, upload-time = "2025-07-19T19:24:09.922Z" }, + { url = "https://files.pythonhosted.org/packages/e7/39/94ea41846547ebb87d16527a3e978c8918632a060f77669a492f8a90b8b9/rignore-0.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a0d0b9ec7929df8fd35ae89cb56619850dc140869139d61a2f4fa2941d2d1878", size = 1111179, upload-time = "2025-07-19T19:24:21.908Z" }, + { url = "https://files.pythonhosted.org/packages/ce/77/9acda68c7cea4d5dd027ef63163e0be30008f635acd75ea801e4c443fcdd/rignore-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8883d079b948ffcd56b67572831c9b8949eca7fe2e8f7bdbf7691c7a9388f054", size = 1121143, upload-time = "2025-07-19T19:24:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/05/67/d1489e9224f33b9a87b7f870650bcab582ee3452df286bcb2fbb6a7ba257/rignore-0.6.4-cp310-cp310-win32.whl", hash = "sha256:5aeac5b354e15eb9f7857b02ad2af12ae2c2ed25a61921b0bd7e272774530f77", size = 643131, upload-time = "2025-07-19T19:24:54.437Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d1/7d668bed51d3f0895e875e57c8e42f421635cdbcb96652ab24f297c9c5cf/rignore-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:90419f881d05a1febb0578a175aa3e51d149ded1875421ed75a8af4392b7fe56", size = 721109, upload-time = "2025-07-19T19:24:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/be/11/66992d271dbc44eac33f3b6b871855bc17e511b9279a2a0982b44c2b0c01/rignore-0.6.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:85f684dfc2c497e35ad34ffd6744a3bcdcac273ec1dbe7d0464bfa20f3331434", size = 888239, upload-time = "2025-07-19T19:23:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1b/a9bde714e474043f97a06097925cf11e4597f9453adc267427d05ff9f38e/rignore-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23954acc6debc852dbccbffbb70f0e26b12d230239e1ad0638eb5540694d0308", size = 824348, upload-time = "2025-07-19T19:23:45.54Z" }, + { url = "https://files.pythonhosted.org/packages/db/58/dabba227fee6553f9be069f58128419b6d4954c784c4cd566cfe59955c1f/rignore-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2bf793bd58dbf3dee063a758b23ea446b5f037370405ecefc78e1e8923fc658", size = 892419, upload-time = "2025-07-19T19:22:33.763Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fa/e3c16368ee32d6d1146cf219b127fd5c7e6baf22cad7a7a5967782ff3b20/rignore-0.6.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1eaeaa5a904e098604ea2012383a721de06211c8b4013abf0d41c3cfeb982f4f", size = 873285, upload-time = "2025-07-19T19:22:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/78/9d/ef43d760dc3d18011d8482692b478785a846bba64157844b3068e428739c/rignore-0.6.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a48bdbeb03093e3fac2b40d62a718c59b5bb4f29cfdc8e7cbb360e1ea7bf0056", size = 1160457, upload-time = "2025-07-19T19:22:59.457Z" }, + { url = "https://files.pythonhosted.org/packages/95/de/eca1b035705e0b4e6c630fd1fcec45d14cf354a4acea88cf29ea0a322fea/rignore-0.6.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c5f9452d116be405f0967160b449c46ac929b50eaf527f33ee4680e3716e39", size = 938833, upload-time = "2025-07-19T19:23:11.657Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2d/58912efa4137e989616d679a5390b53e93d5150be47217dd686ff60cd4cd/rignore-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf1039bfbdaa0f9710a6fb75436c25ca26d364881ec4d1e66d466bb36a7fb98", size = 950603, upload-time = "2025-07-19T19:23:35.245Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3d/9827cc1c7674d8d884d3d231a224a2db8ea8eae075a1611dfdcd0c301e20/rignore-0.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:136629eb0ec2b6ac6ab34e71ce8065a07106fe615a53eceefc30200d528a4612", size = 976867, upload-time = "2025-07-19T19:23:24.919Z" }, + { url = "https://files.pythonhosted.org/packages/75/47/9dcee35e24897b62d66f7578f127bc91465c942a9d702d516d3fe7dcaa00/rignore-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:35e3d0ebaf01086e6454c3fecae141e2db74a5ddf4a97c72c69428baeff0b7d4", size = 1067603, upload-time = "2025-07-19T19:23:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/4b/68/f66e7c0b0fc009f3e19ba8e6c3078a227285e3aecd9f6498d39df808cdfd/rignore-0.6.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7ed1f9010fa1ef5ea0b69803d1dfb4b7355921779e03a30396034c52691658bc", size = 1136289, upload-time = "2025-07-19T19:24:11.136Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b7/6fff161fe3ae5c0e0a0dded9a428e41d31c7fefc4e57c7553b9ffb064139/rignore-0.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c16e9e898ed0afe2e20fa8d6412e02bd13f039f7e0d964a289368efd4d9ad320", size = 1111566, upload-time = "2025-07-19T19:24:23.065Z" }, + { url = "https://files.pythonhosted.org/packages/1f/c5/a5978ad65074a08dad46233a3333d154ae9cb9339325f3c181002a174746/rignore-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e6bc0bdcd404a7a8268629e8e99967127bb41e02d9eb09a471364c4bc25e215", size = 1121142, upload-time = "2025-07-19T19:24:35.151Z" }, + { url = "https://files.pythonhosted.org/packages/e8/af/91f084374b95dc2477a4bd066957beb3b61b551f2364b4f7f5bc52c9e4c7/rignore-0.6.4-cp311-cp311-win32.whl", hash = "sha256:fdd59bd63d2a49cc6d4f3598f285552ccb1a41e001df1012e0e0345cf2cabf79", size = 643031, upload-time = "2025-07-19T19:24:55.541Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/31672aa957aebba8903005313697127bbbad9db3afcfc9857150301fab1d/rignore-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:7bf5be0e8a01845e57b5faa47ef9c623bb2070aa2f743c2fc73321ffaae45701", size = 721003, upload-time = "2025-07-19T19:24:48.867Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6c/e5af4383cdd7829ef9aa63ac82a6507983e02dbc7c2e7b9aa64b7b8e2c7a/rignore-0.6.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74720d074b79f32449d5d212ce732e0144a294a184246d1f1e7bcc1fc5c83b69", size = 885885, upload-time = "2025-07-19T19:23:53.236Z" }, + { url = "https://files.pythonhosted.org/packages/89/3e/1b02a868830e464769aa417ee195ac352fe71ff818df8ce50c4b998edb9c/rignore-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a8184fcf567bd6b6d7b85a0c138d98dd40f63054141c96b175844414c5530d7", size = 819736, upload-time = "2025-07-19T19:23:46.565Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/b9be0c523d97c09f3c6508a67ce376aba4efe41c333c58903a0d7366439a/rignore-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcb0d7d7ecc3fbccf6477bb187c04a091579ea139f15f139abe0b3b48bdfef69", size = 892779, upload-time = "2025-07-19T19:22:35.167Z" }, + { url = "https://files.pythonhosted.org/packages/91/f4/3064b06233697f2993485d132f06fe95061fef71631485da75aed246c4fd/rignore-0.6.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feac73377a156fb77b3df626c76f7e5893d9b4e9e886ac8c0f9d44f1206a2a91", size = 872116, upload-time = "2025-07-19T19:22:47.828Z" }, + { url = "https://files.pythonhosted.org/packages/99/94/cb8e7af9a3c0a665f10e2366144e0ebc66167cf846aca5f1ac31b3661598/rignore-0.6.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:465179bc30beb1f7a3439e428739a2b5777ed26660712b8c4e351b15a7c04483", size = 1163345, upload-time = "2025-07-19T19:23:00.557Z" }, + { url = "https://files.pythonhosted.org/packages/86/6b/49faa7ad85ceb6ccef265df40091d9992232d7f6055fa664fe0a8b13781c/rignore-0.6.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a4877b4dca9cf31a4d09845b300c677c86267657540d0b4d3e6d0ce3110e6e9", size = 939967, upload-time = "2025-07-19T19:23:13.494Z" }, + { url = "https://files.pythonhosted.org/packages/80/c8/b91afda10bd5ca1e3a80463340b899c0dc26a7750a9f3c94f668585c7f40/rignore-0.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456456802b1e77d1e2d149320ee32505b8183e309e228129950b807d204ddd17", size = 949717, upload-time = "2025-07-19T19:23:36.404Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f1/88bfdde58ae3fb1c1a92bb801f492eea8eafcdaf05ab9b75130023a4670b/rignore-0.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c1ff2fc223f1d9473d36923160af37bf765548578eb9d47a2f52e90da8ae408", size = 975534, upload-time = "2025-07-19T19:23:25.988Z" }, + { url = "https://files.pythonhosted.org/packages/aa/8f/a80b4a2e48ceba56ba19e096d41263d844757e10aa36ede212571b5d8117/rignore-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e445fbc214ae18e0e644a78086ea5d0f579e210229a4fbe86367d11a4cd03c11", size = 1067837, upload-time = "2025-07-19T19:23:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/7d/90/0905597af0e78748909ef58418442a480ddd93e9fc89b0ca9ab170c357c0/rignore-0.6.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e07d9c5270fc869bc431aadcfb6ed0447f89b8aafaa666914c077435dc76a123", size = 1134959, upload-time = "2025-07-19T19:24:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/cc/7d/0fa29adf9183b61947ce6dc8a1a9779a8ea16573f557be28ec893f6ddbaa/rignore-0.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a6ccc0ea83d2c0c6df6b166f2acacedcc220a516436490f41e99a5ae73b6019", size = 1109708, upload-time = "2025-07-19T19:24:24.176Z" }, + { url = "https://files.pythonhosted.org/packages/4e/a7/92892ed86b2e36da403dd3a0187829f2d880414cef75bd612bfdf4dedebc/rignore-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:536392c5ec91755db48389546c833c4ab1426fe03e5a8522992b54ef8a244e7e", size = 1120546, upload-time = "2025-07-19T19:24:36.377Z" }, + { url = "https://files.pythonhosted.org/packages/31/1b/d29ae1fe901d523741d6d1d3ffe0d630734dd0ed6b047628a69c1e15ea44/rignore-0.6.4-cp312-cp312-win32.whl", hash = "sha256:f5f9dca46fc41c0a1e236767f68be9d63bdd2726db13a0ae3a30f68414472969", size = 642005, upload-time = "2025-07-19T19:24:56.671Z" }, + { url = "https://files.pythonhosted.org/packages/1a/41/a224944824688995374e4525115ce85fecd82442fc85edd5bcd81f4f256d/rignore-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:e02eecb9e1b9f9bf7c9030ae73308a777bed3b2486204cc74dfcfbe699ab1497", size = 720358, upload-time = "2025-07-19T19:24:49.959Z" }, + { url = "https://files.pythonhosted.org/packages/db/a3/edd7d0d5cc0720de132b6651cef95ee080ce5fca11c77d8a47db848e5f90/rignore-0.6.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2b3b1e266ce45189240d14dfa1057f8013ea34b9bc8b3b44125ec8d25fdb3985", size = 885304, upload-time = "2025-07-19T19:23:54.268Z" }, + { url = "https://files.pythonhosted.org/packages/93/a1/d8d2fb97a6548307507d049b7e93885d4a0dfa1c907af5983fd9f9362a21/rignore-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45fe803628cc14714df10e8d6cdc23950a47eb9eb37dfea9a4779f4c672d2aa0", size = 818799, upload-time = "2025-07-19T19:23:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/949981fcc180ad5ba7b31c52e78b74b2dea6b7bf744ad4c0c4b212f6da78/rignore-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e439f034277a947a4126e2da79dbb43e33d73d7c09d3d72a927e02f8a16f59aa", size = 892024, upload-time = "2025-07-19T19:22:36.18Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d3/9042d701a8062d9c88f87760bbc2695ee2c23b3f002d34486b72a85f8efe/rignore-0.6.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b5121650ae24621154c7bdba8b8970b0739d8146505c9f38e0cda9385d1004", size = 871430, upload-time = "2025-07-19T19:22:49.62Z" }, + { url = "https://files.pythonhosted.org/packages/eb/50/3370249b984212b7355f3d9241aa6d02e706067c6d194a2614dfbc0f5b27/rignore-0.6.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52b0957b585ab48a445cf8ac1dbc33a272ab060835e583b4f95aa8c67c23fb2b", size = 1160559, upload-time = "2025-07-19T19:23:01.629Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6f/2ad7f925838091d065524f30a8abda846d1813eee93328febf262b5cda21/rignore-0.6.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50359e0d5287b5e2743bd2f2fbf05df619c8282fd3af12f6628ff97b9675551d", size = 939947, upload-time = "2025-07-19T19:23:14.608Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/626ec94d62475ae7ef8b00ef98cea61cbea52a389a666703c97c4673d406/rignore-0.6.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe18096dcb1596757dfe0b412aab6d32564473ae7ee58dea0a8b4be5b1a2e3b", size = 949471, upload-time = "2025-07-19T19:23:37.521Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c3/699c4f03b3c46f4b5c02f17a0a339225da65aad547daa5b03001e7c6a382/rignore-0.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b79c212d9990a273ad91e8d9765e1766ef6ecedd3be65375d786a252762ba385", size = 974912, upload-time = "2025-07-19T19:23:27.13Z" }, + { url = "https://files.pythonhosted.org/packages/cd/35/04626c12f9f92a9fc789afc2be32838a5d9b23b6fa8b2ad4a8625638d15b/rignore-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6ffa7f2a8894c65aa5dc4e8ac8bbdf39a326c0c6589efd27686cfbb48f0197d", size = 1067281, upload-time = "2025-07-19T19:24:01.016Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9c/8f17baf3b984afea151cb9094716f6f1fb8e8737db97fc6eb6d494bd0780/rignore-0.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a63f5720dffc8d8fb0a4d02fafb8370a4031ebf3f99a4e79f334a91e905b7349", size = 1134414, upload-time = "2025-07-19T19:24:13.534Z" }, + { url = "https://files.pythonhosted.org/packages/10/88/ef84ffa916a96437c12cefcc39d474122da9626d75e3a2ebe09ec5d32f1b/rignore-0.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ce33982da47ac5dc09d19b04fa8d7c9aa6292fc0bd1ecf33076989faa8886094", size = 1109330, upload-time = "2025-07-19T19:24:25.303Z" }, + { url = "https://files.pythonhosted.org/packages/27/43/2ada5a2ec03b82e903610a1c483f516f78e47700ee6db9823f739e08b3af/rignore-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d899621867aa266824fbd9150e298f19d25b93903ef0133c09f70c65a3416eca", size = 1120381, upload-time = "2025-07-19T19:24:37.798Z" }, + { url = "https://files.pythonhosted.org/packages/3b/99/e7bcc643085131cb14dbea772def72bf1f6fe9037171ebe177c4f228abc8/rignore-0.6.4-cp313-cp313-win32.whl", hash = "sha256:d0615a6bf4890ec5a90b5fb83666822088fbd4e8fcd740c386fcce51e2f6feea", size = 641761, upload-time = "2025-07-19T19:24:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/d9/25/7798908044f27dea1a8abdc75c14523e33770137651e5f775a15143f4218/rignore-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:145177f0e32716dc2f220b07b3cde2385b994b7ea28d5c96fbec32639e9eac6f", size = 719876, upload-time = "2025-07-19T19:24:51.125Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e3/ae1e30b045bf004ad77bbd1679b9afff2be8edb166520921c6f29420516a/rignore-0.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e55bf8f9bbd186f58ab646b4a08718c77131d28a9004e477612b0cbbd5202db2", size = 891776, upload-time = "2025-07-19T19:22:37.78Z" }, + { url = "https://files.pythonhosted.org/packages/45/a9/1193e3bc23ca0e6eb4f17cf4b99971237f97cfa6f241d98366dff90a6d09/rignore-0.6.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2521f7bf3ee1f2ab22a100a3a4eed39a97b025804e5afe4323528e9ce8f084a5", size = 871442, upload-time = "2025-07-19T19:22:50.972Z" }, + { url = "https://files.pythonhosted.org/packages/20/83/4c52ae429a0b2e1ce667e35b480e9a6846f9468c443baeaed5d775af9485/rignore-0.6.4-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cc35773a8a9c119359ef974d0856988d4601d4daa6f532c05f66b4587cf35bc", size = 1159844, upload-time = "2025-07-19T19:23:02.751Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2f/c740f5751f464c937bfe252dc15a024ae081352cfe80d94aa16d6a617482/rignore-0.6.4-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b665b1ea14457d7b49e834baabc635a3b8c10cfb5cca5c21161fabdbfc2b850e", size = 939456, upload-time = "2025-07-19T19:23:15.72Z" }, + { url = "https://files.pythonhosted.org/packages/fc/dd/68dbb08ac0edabf44dd144ff546a3fb0253c5af708e066847df39fc9188f/rignore-0.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c7fd339f344a8548724f289495b835bed7b81174a0bc1c28c6497854bd8855db", size = 1067070, upload-time = "2025-07-19T19:24:02.803Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3a/7e7ea6f0d31d3f5beb0f2cf2c4c362672f5f7f125714458673fc579e2bed/rignore-0.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:91dc94b1cc5af8d6d25ce6edd29e7351830f19b0a03b75cb3adf1f76d00f3007", size = 1134598, upload-time = "2025-07-19T19:24:15.039Z" }, + { url = "https://files.pythonhosted.org/packages/7e/06/1b3307f6437d29bede5a95738aa89e6d910ba68d4054175c9f60d8e2c6b1/rignore-0.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4d1918221a249e5342b60fd5fa513bf3d6bf272a8738e66023799f0c82ecd788", size = 1108862, upload-time = "2025-07-19T19:24:26.765Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/b37c82519f335f2c472a63fc6215c6f4c51063ecf3166e3acf508011afbd/rignore-0.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:240777332b859dc89dcba59ab6e3f1e062bc8e862ffa3e5f456e93f7fd5cb415", size = 1120002, upload-time = "2025-07-19T19:24:38.952Z" }, + { url = "https://files.pythonhosted.org/packages/ac/72/2f05559ed5e69bdfdb56ea3982b48e6c0017c59f7241f7e1c5cae992b347/rignore-0.6.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b0e548753e55cc648f1e7b02d9f74285fe48bb49cec93643d31e563773ab3f", size = 949454, upload-time = "2025-07-19T19:23:38.664Z" }, + { url = "https://files.pythonhosted.org/packages/0b/92/186693c8f838d670510ac1dfb35afbe964320fbffb343ba18f3d24441941/rignore-0.6.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6971ac9fdd5a0bd299a181096f091c4f3fd286643adceba98eccc03c688a6637", size = 974663, upload-time = "2025-07-19T19:23:28.24Z" }, + { url = "https://files.pythonhosted.org/packages/85/4d/5a69ea5ae7de78eddf0a0699b6dbd855f87c1436673425461188ea39662f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40f493eef4b191777ba6d16879e3f73836142e04480d2e2f483675d652e6b559", size = 895408, upload-time = "2025-07-19T19:22:42.16Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c3/b6cdf9b676d6774c5de3ca04a5f4dbaffae3bb06bdee395e095be24f098e/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6790635e4df35333e27cd9e8b31d1d559826cf8b52f2c374b81ab698ac0140cf", size = 873042, upload-time = "2025-07-19T19:22:54.663Z" }, + { url = "https://files.pythonhosted.org/packages/80/25/61182149b2f2ca86c22c6253b361ec0e983e60e913ca75588a7d559b41eb/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e326dab28787f07c6987c04686d4ad9d4b1e1caca1a15b85d443f91af2e133d2", size = 1162036, upload-time = "2025-07-19T19:23:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/db/44/7fe55c2b7adc8c90dc8709ef2fac25fa526b0c8bfd1090af4e6b33c2e42f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd24cb0f58c6036b0f64ac6fc3f759b7f0de5506fa9f5a65e9d57f8cf44a026d", size = 940381, upload-time = "2025-07-19T19:23:19.364Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a3/8cc0c9a9db980a1589007d0fedcaf41475820e0cd4950a5f6eeb8ebc0ee0/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36cb95b0acae3c88b99a39f4246b395fd983848f3ec85ff26531d638b6584a45", size = 951924, upload-time = "2025-07-19T19:23:42.209Z" }, + { url = "https://files.pythonhosted.org/packages/07/f2/4f2c88307c84801d6c772c01e8d856deaa8e85117180b88aaa0f41d4f86f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dfc954973429ce545d06163d87a6bae0ccea5703adbc957ee3d332c9592a58eb", size = 976515, upload-time = "2025-07-19T19:23:31.524Z" }, + { url = "https://files.pythonhosted.org/packages/a4/bd/f701ddf897cf5e3f394107e6dad147216b3a0d84e9d53d7a5fed7cc97d26/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:cbed37d7c128b58ab9ade80e131efc4a48b6d045cd0bd1d3254cbb6b4a0ad67e", size = 1069896, upload-time = "2025-07-19T19:24:06.24Z" }, + { url = "https://files.pythonhosted.org/packages/00/52/1ae54afad26aafcfee1b44a36b27bb0dd63f1c23081e1599dbf681368925/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a0db910ef867d6ca2d52fefd22d8b6b63b20ec61661e2ad57e5c425a4e39431a", size = 1136337, upload-time = "2025-07-19T19:24:18.529Z" }, + { url = "https://files.pythonhosted.org/packages/85/9a/3b74aabb69ed118d0b493afa62d1aacc3bf12b8f11bf682a3c02174c3068/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d664443a0a71d0a7d669adf32be59c4249bbff8b2810960f1b91d413ee4cf6b8", size = 1111677, upload-time = "2025-07-19T19:24:30.21Z" }, + { url = "https://files.pythonhosted.org/packages/70/7d/bd0f6c1bc89c80b116b526b77cdd5263c0ad218d5416aebf4ca9cce9ca73/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:b9f6f1d91429b4a6772152848815cf1459663796b7b899a0e15d9198e32c9371", size = 1122823, upload-time = "2025-07-19T19:24:42.476Z" }, + { url = "https://files.pythonhosted.org/packages/33/a1/daaa2df10dfa6d87c896a5783c8407c284530d5a056307d1f55a8ef0c533/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b3da26d5a35ab15525b68d30b7352ad2247321f5201fc7e50ba6d547f78d5ea", size = 895772, upload-time = "2025-07-19T19:22:43.423Z" }, + { url = "https://files.pythonhosted.org/packages/35/e6/65130a50cd3ed11c967034dfd653e160abb7879fb4ee338a1cccaeda7acd/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43028f3587558231d9fa68accff58c901dc50fd7bbc5764d3ee3df95290f6ebf", size = 873093, upload-time = "2025-07-19T19:22:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/32/c4/02ead1274ce935c59f2bb3deaaaa339df9194bc40e3c2d8d623e31e47ec4/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc56f1fcab7740751b98fead67b98ba64896424d8c834ea22089568db4e36dfa", size = 1162199, upload-time = "2025-07-19T19:23:08.376Z" }, + { url = "https://files.pythonhosted.org/packages/78/0c/94a4edce0e80af69f200cc35d8da4c727c52d28f0c9d819b388849ae8ef6/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6033f2280898535a5f69935e08830a4e49ff1e29ef2c3f9a2b9ced59de06fdbf", size = 940176, upload-time = "2025-07-19T19:23:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/43/92/21ec579c999a3ed4d1b2a5926a9d0edced7c65d8ac353bc9120d49b05a64/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f5ac0c4e6a24be88f3821e101ef4665e9e1dc015f9e45109f32fed71dbcdafa", size = 951632, upload-time = "2025-07-19T19:23:43.32Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/72e7ba244222b9efdeb18f9974d6f1e30cf5a2289e1b482a1e8b3ebee90f/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8906ac8dd585ece83b1346e0470260a1951058cc0ef5a17542069bde4aa3f42f", size = 976923, upload-time = "2025-07-19T19:23:32.678Z" }, + { url = "https://files.pythonhosted.org/packages/8e/14/e754c12bc953c7fa309687cd30a6ea95e5721168fb0b2a99a34bff24be5c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:14d095622969504a2e56f666286202dad583f08d3347b7be2d647ddfd7a9bf47", size = 1069861, upload-time = "2025-07-19T19:24:07.671Z" }, + { url = "https://files.pythonhosted.org/packages/a6/24/ba2bdaf04a19b5331c051b9d480e8daca832bed4aeaa156d6d679044c06c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:30f3d688df7eb4850318f1b5864d14f2c5fe5dbf3803ed0fc8329d2a7ad560dc", size = 1136368, upload-time = "2025-07-19T19:24:19.68Z" }, + { url = "https://files.pythonhosted.org/packages/83/48/7cf52353299e02aa629150007fa75f4b91d99b4f2fa536f2e24ead810116/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:028f62a7b0a6235bb3f03c9e7f342352e7fa4b3f08c761c72f9de8faee40ed9c", size = 1111714, upload-time = "2025-07-19T19:24:31.717Z" }, + { url = "https://files.pythonhosted.org/packages/84/9c/3881ad34f01942af0cf713e25e476bf851e04e389cc3ff146c3b459ab861/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:7e6c425603db2c147eace4f752ca3cd4551e7568c9d332175d586c68bcbe3d8d", size = 1122433, upload-time = "2025-07-19T19:24:43.973Z" }, ] [[package]] name = "roman" version = "5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/86/8bdb59db4b7ea9a2bd93f8d25298981e09a4c9f4744cf4cbafa7ef6fee7b/roman-5.1.tar.gz", hash = "sha256:3a86572e9bc9183e771769601189e5fa32f1620ffeceebb9eca836affb409986", size = 8066 } +sdist = { url = "https://files.pythonhosted.org/packages/30/86/8bdb59db4b7ea9a2bd93f8d25298981e09a4c9f4744cf4cbafa7ef6fee7b/roman-5.1.tar.gz", hash = "sha256:3a86572e9bc9183e771769601189e5fa32f1620ffeceebb9eca836affb409986", size = 8066, upload-time = "2025-07-18T05:25:12.753Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/d0/27c9840ddaf331ace898c7f4aa1e1304a7acc22b844b5420fabb6d14c3a0/roman-5.1-py3-none-any.whl", hash = "sha256:bf595d8a9bc4a8e8b1dfa23e1d4def0251b03b494786df6b8c3d3f1635ce285a", size = 5825 }, + { url = "https://files.pythonhosted.org/packages/f7/d0/27c9840ddaf331ace898c7f4aa1e1304a7acc22b844b5420fabb6d14c3a0/roman-5.1-py3-none-any.whl", hash = "sha256:bf595d8a9bc4a8e8b1dfa23e1d4def0251b03b494786df6b8c3d3f1635ce285a", size = 5825, upload-time = "2025-07-18T05:25:11.496Z" }, ] [[package]] name = "roman-numerals-py" version = "3.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017 } +sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 }, + { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" }, +] + +[[package]] +name = "sentry-sdk" +version = "2.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/38/10d6bfe23df1bfc65ac2262ed10b45823f47f810b0057d3feeea1ca5c7ed/sentry_sdk-2.34.1.tar.gz", hash = "sha256:69274eb8c5c38562a544c3e9f68b5be0a43be4b697f5fd385bf98e4fbe672687", size = 336969, upload-time = "2025-07-30T11:13:37.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/3e/bb34de65a5787f76848a533afbb6610e01fbcdd59e76d8679c254e02255c/sentry_sdk-2.34.1-py2.py3-none-any.whl", hash = "sha256:b7a072e1cdc5abc48101d5146e1ae680fa81fe886d8d95aaa25a0b450c818d32", size = 357743, upload-time = "2025-07-30T11:13:36.145Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, ] [[package]] name = "snowballstemmer" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, ] [[package]] name = "soupsieve" version = "2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, ] [[package]] @@ -1265,9 +1628,9 @@ dependencies = [ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, ] [[package]] @@ -1297,9 +1660,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876 } +sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741 }, + { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, ] [[package]] @@ -1312,9 +1675,9 @@ resolution-markers = [ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/26/f0/43c6a5ff3e7b08a8c3b32f81b859f1b518ccc31e45f22e2b41ced38be7b9/sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55", size = 36282 } +sdist = { url = "https://files.pythonhosted.org/packages/26/f0/43c6a5ff3e7b08a8c3b32f81b859f1b518ccc31e45f22e2b41ced38be7b9/sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55", size = 36282, upload-time = "2025-01-16T18:25:30.958Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/dc/dc46c5c7c566b7ec5e8f860f9c89533bf03c0e6aadc96fb9b337867e4460/sphinx_autodoc_typehints-3.0.1-py3-none-any.whl", hash = "sha256:4b64b676a14b5b79cefb6628a6dc8070e320d4963e8ff640a2f3e9390ae9045a", size = 20245 }, + { url = "https://files.pythonhosted.org/packages/3c/dc/dc46c5c7c566b7ec5e8f860f9c89533bf03c0e6aadc96fb9b337867e4460/sphinx_autodoc_typehints-3.0.1-py3-none-any.whl", hash = "sha256:4b64b676a14b5b79cefb6628a6dc8070e320d4963e8ff640a2f3e9390ae9045a", size = 20245, upload-time = "2025-01-16T18:25:27.394Z" }, ] [[package]] @@ -1328,9 +1691,9 @@ resolution-markers = [ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/68/a388a9b8f066cd865d9daa65af589d097efbfab9a8c302d2cb2daa43b52e/sphinx_autodoc_typehints-3.2.0.tar.gz", hash = "sha256:107ac98bc8b4837202c88c0736d59d6da44076e65a0d7d7d543a78631f662a9b", size = 36724 } +sdist = { url = "https://files.pythonhosted.org/packages/93/68/a388a9b8f066cd865d9daa65af589d097efbfab9a8c302d2cb2daa43b52e/sphinx_autodoc_typehints-3.2.0.tar.gz", hash = "sha256:107ac98bc8b4837202c88c0736d59d6da44076e65a0d7d7d543a78631f662a9b", size = 36724, upload-time = "2025-04-25T16:53:25.872Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/c7/8aab362e86cbf887e58be749a78d20ad743e1eb2c73c2b13d4761f39a104/sphinx_autodoc_typehints-3.2.0-py3-none-any.whl", hash = "sha256:884b39be23b1d884dcc825d4680c9c6357a476936e3b381a67ae80091984eb49", size = 20563 }, + { url = "https://files.pythonhosted.org/packages/f7/c7/8aab362e86cbf887e58be749a78d20ad743e1eb2c73c2b13d4761f39a104/sphinx_autodoc_typehints-3.2.0-py3-none-any.whl", hash = "sha256:884b39be23b1d884dcc825d4680c9c6357a476936e3b381a67ae80091984eb49", size = 20563, upload-time = "2025-04-25T16:53:24.492Z" }, ] [[package]] @@ -1342,102 +1705,115 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/19/d002ed96bdc7738c15847c730e1e88282d738263deac705d5713b4d8fa94/sphinx_book_theme-1.1.4.tar.gz", hash = "sha256:73efe28af871d0a89bd05856d300e61edce0d5b2fbb7984e84454be0fedfe9ed", size = 439188 } +sdist = { url = "https://files.pythonhosted.org/packages/45/19/d002ed96bdc7738c15847c730e1e88282d738263deac705d5713b4d8fa94/sphinx_book_theme-1.1.4.tar.gz", hash = "sha256:73efe28af871d0a89bd05856d300e61edce0d5b2fbb7984e84454be0fedfe9ed", size = 439188, upload-time = "2025-02-20T16:32:32.581Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/9e/c41d68be04eef5b6202b468e0f90faf0c469f3a03353f2a218fd78279710/sphinx_book_theme-1.1.4-py3-none-any.whl", hash = "sha256:843b3f5c8684640f4a2d01abd298beb66452d1b2394cd9ef5be5ebd5640ea0e1", size = 433952 }, + { url = "https://files.pythonhosted.org/packages/51/9e/c41d68be04eef5b6202b468e0f90faf0c469f3a03353f2a218fd78279710/sphinx_book_theme-1.1.4-py3-none-any.whl", hash = "sha256:843b3f5c8684640f4a2d01abd298beb66452d1b2394cd9ef5be5ebd5640ea0e1", size = 433952, upload-time = "2025-02-20T16:32:31.009Z" }, ] [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, ] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, ] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, ] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, ] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, +] + +[[package]] +name = "starlette" +version = "0.47.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" }, ] [[package]] name = "tomli" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, ] [[package]] @@ -1447,18 +1823,33 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/68/71c1a15b5f65f40e91b65da23b8224dad41349894535a97f63a52e462196/typeguard-4.4.4.tar.gz", hash = "sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74", size = 75203 } +sdist = { url = "https://files.pythonhosted.org/packages/c7/68/71c1a15b5f65f40e91b65da23b8224dad41349894535a97f63a52e462196/typeguard-4.4.4.tar.gz", hash = "sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74", size = 75203, upload-time = "2025-06-18T09:56:07.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl", hash = "sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e", size = 34874 }, + { url = "https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl", hash = "sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e", size = 34874, upload-time = "2025-06-18T09:56:05.999Z" }, +] + +[[package]] +name = "typer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload-time = "2025-05-26T14:30:31.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" }, ] [[package]] name = "typing-extensions" version = "4.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423, upload-time = "2025-06-02T14:52:11.399Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" }, ] [[package]] @@ -1469,9 +1860,9 @@ dependencies = [ { name = "mypy-extensions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 }, + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, ] [[package]] @@ -1481,36 +1872,93 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, ] [[package]] name = "uc-micro-py" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043 } +sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043, upload-time = "2024-02-09T16:52:01.654Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229 }, + { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229, upload-time = "2024-02-09T16:52:00.371Z" }, ] [[package]] name = "urllib3" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672, upload-time = "2025-04-10T15:23:39.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680, upload-time = "2025-04-10T15:23:37.377Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.35.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, + { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "httptools" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "uvloop" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/76/44a55515e8c9505aa1420aebacf4dd82552e5e15691654894e90d0bd051a/uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f", size = 1442019, upload-time = "2024-10-14T23:37:20.068Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/62d5800358a78cc25c8a6c72ef8b10851bdb8cca22e14d9c74167b7f86da/uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d", size = 801898, upload-time = "2024-10-14T23:37:22.663Z" }, + { url = "https://files.pythonhosted.org/packages/f3/96/63695e0ebd7da6c741ccd4489b5947394435e198a1382349c17b1146bb97/uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26", size = 3827735, upload-time = "2024-10-14T23:37:25.129Z" }, + { url = "https://files.pythonhosted.org/packages/61/e0/f0f8ec84979068ffae132c58c79af1de9cceeb664076beea86d941af1a30/uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb", size = 3825126, upload-time = "2024-10-14T23:37:27.59Z" }, + { url = "https://files.pythonhosted.org/packages/bf/fe/5e94a977d058a54a19df95f12f7161ab6e323ad49f4dabc28822eb2df7ea/uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f", size = 3705789, upload-time = "2024-10-14T23:37:29.385Z" }, + { url = "https://files.pythonhosted.org/packages/26/dd/c7179618e46092a77e036650c1f056041a028a35c4d76945089fcfc38af8/uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c", size = 3800523, upload-time = "2024-10-14T23:37:32.048Z" }, + { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" }, + { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" }, + { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" }, + { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" }, + { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" }, + { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123, upload-time = "2024-10-14T23:38:00.688Z" }, + { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325, upload-time = "2024-10-14T23:38:02.309Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806, upload-time = "2024-10-14T23:38:04.711Z" }, + { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068, upload-time = "2024-10-14T23:38:06.385Z" }, + { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428, upload-time = "2024-10-14T23:38:08.416Z" }, + { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018, upload-time = "2024-10-14T23:38:10.888Z" }, ] [[package]] @@ -1522,80 +1970,239 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316 } +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload-time = "2025-05-08T17:58:23.811Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982 }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload-time = "2025-05-08T17:58:21.15Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/dd/579d1dc57f0f895426a1211c4ef3b0cb37eb9e642bb04bdcd962b5df206a/watchfiles-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:27f30e14aa1c1e91cb653f03a63445739919aef84c8d2517997a83155e7a2fcc", size = 405757, upload-time = "2025-06-15T19:04:51.058Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/7a0318cd874393344d48c34d53b3dd419466adf59a29ba5b51c88dd18b86/watchfiles-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3366f56c272232860ab45c77c3ca7b74ee819c8e1f6f35a7125556b198bbc6df", size = 397511, upload-time = "2025-06-15T19:04:52.79Z" }, + { url = "https://files.pythonhosted.org/packages/06/be/503514656d0555ec2195f60d810eca29b938772e9bfb112d5cd5ad6f6a9e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8412eacef34cae2836d891836a7fff7b754d6bcac61f6c12ba5ca9bc7e427b68", size = 450739, upload-time = "2025-06-15T19:04:54.203Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0d/a05dd9e5f136cdc29751816d0890d084ab99f8c17b86f25697288ca09bc7/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df670918eb7dd719642e05979fc84704af913d563fd17ed636f7c4783003fdcc", size = 458106, upload-time = "2025-06-15T19:04:55.607Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fa/9cd16e4dfdb831072b7ac39e7bea986e52128526251038eb481effe9f48e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7642b9bc4827b5518ebdb3b82698ada8c14c7661ddec5fe719f3e56ccd13c97", size = 484264, upload-time = "2025-06-15T19:04:57.009Z" }, + { url = "https://files.pythonhosted.org/packages/32/04/1da8a637c7e2b70e750a0308e9c8e662ada0cca46211fa9ef24a23937e0b/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199207b2d3eeaeb80ef4411875a6243d9ad8bc35b07fc42daa6b801cc39cc41c", size = 597612, upload-time = "2025-06-15T19:04:58.409Z" }, + { url = "https://files.pythonhosted.org/packages/30/01/109f2762e968d3e58c95731a206e5d7d2a7abaed4299dd8a94597250153c/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a479466da6db5c1e8754caee6c262cd373e6e6c363172d74394f4bff3d84d7b5", size = 477242, upload-time = "2025-06-15T19:04:59.786Z" }, + { url = "https://files.pythonhosted.org/packages/b5/b8/46f58cf4969d3b7bc3ca35a98e739fa4085b0657a1540ccc29a1a0bc016f/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935f9edd022ec13e447e5723a7d14456c8af254544cefbc533f6dd276c9aa0d9", size = 453148, upload-time = "2025-06-15T19:05:01.103Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/8267594263b1770f1eb76914940d7b2d03ee55eca212302329608208e061/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8076a5769d6bdf5f673a19d51da05fc79e2bbf25e9fe755c47595785c06a8c72", size = 626574, upload-time = "2025-06-15T19:05:02.582Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2f/7f2722e85899bed337cba715723e19185e288ef361360718973f891805be/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86b1e28d4c37e89220e924305cd9f82866bb0ace666943a6e4196c5df4d58dcc", size = 624378, upload-time = "2025-06-15T19:05:03.719Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/64c88ec43d90a568234d021ab4b2a6f42a5230d772b987c3f9c00cc27b8b/watchfiles-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d1caf40c1c657b27858f9774d5c0e232089bca9cb8ee17ce7478c6e9264d2587", size = 279829, upload-time = "2025-06-15T19:05:04.822Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/a9c1ed33de7af80935e4eac09570de679c6e21c07070aa99f74b4431f4d6/watchfiles-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a89c75a5b9bc329131115a409d0acc16e8da8dfd5867ba59f1dd66ae7ea8fa82", size = 292192, upload-time = "2025-06-15T19:05:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, + { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, + { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, + { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, + { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, + { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, + { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, + { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, + { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, + { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, + { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, + { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, + { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, + { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, + { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" }, + { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" }, + { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" }, + { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" }, + { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" }, + { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" }, + { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" }, + { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" }, + { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" }, + { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" }, + { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" }, + { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" }, + { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" }, + { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" }, + { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" }, + { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" }, + { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" }, + { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" }, + { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" }, + { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" }, + { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" }, + { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" }, + { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" }, + { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" }, + { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" }, + { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" }, + { url = "https://files.pythonhosted.org/packages/be/7c/a3d7c55cfa377c2f62c4ae3c6502b997186bc5e38156bafcb9b653de9a6d/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a6fd40bbb50d24976eb275ccb55cd1951dfb63dbc27cae3066a6ca5f4beabd5", size = 406748, upload-time = "2025-06-15T19:06:44.2Z" }, + { url = "https://files.pythonhosted.org/packages/38/d0/c46f1b2c0ca47f3667b144de6f0515f6d1c670d72f2ca29861cac78abaa1/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f811079d2f9795b5d48b55a37aa7773680a5659afe34b54cc1d86590a51507d", size = 398801, upload-time = "2025-06-15T19:06:45.774Z" }, + { url = "https://files.pythonhosted.org/packages/70/9c/9a6a42e97f92eeed77c3485a43ea96723900aefa3ac739a8c73f4bff2cd7/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2726d7bfd9f76158c84c10a409b77a320426540df8c35be172444394b17f7ea", size = 451528, upload-time = "2025-06-15T19:06:46.791Z" }, + { url = "https://files.pythonhosted.org/packages/51/7b/98c7f4f7ce7ff03023cf971cd84a3ee3b790021ae7584ffffa0eb2554b96/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df32d59cb9780f66d165a9a7a26f19df2c7d24e3bd58713108b41d0ff4f929c6", size = 454095, upload-time = "2025-06-15T19:06:48.211Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, ] [[package]] name = "wrapt" version = "1.17.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307 }, - { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486 }, - { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777 }, - { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314 }, - { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947 }, - { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778 }, - { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716 }, - { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548 }, - { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334 }, - { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427 }, - { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774 }, - { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308 }, - { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488 }, - { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776 }, - { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776 }, - { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420 }, - { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199 }, - { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307 }, - { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025 }, - { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879 }, - { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419 }, - { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773 }, - { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 }, - { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 }, - { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 }, - { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 }, - { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 }, - { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 }, - { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 }, - { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 }, - { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 }, - { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 }, - { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 }, - { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 }, - { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 }, - { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 }, - { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 }, - { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 }, - { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 }, - { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 }, - { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 }, - { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 }, - { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 }, - { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 }, - { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 }, - { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 }, - { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 }, - { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 }, - { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 }, - { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 }, - { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 }, - { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 }, - { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 }, - { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 }, - { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 }, - { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 }, +sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531, upload-time = "2025-01-14T10:35:45.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307, upload-time = "2025-01-14T10:33:13.616Z" }, + { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486, upload-time = "2025-01-14T10:33:15.947Z" }, + { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777, upload-time = "2025-01-14T10:33:17.462Z" }, + { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314, upload-time = "2025-01-14T10:33:21.282Z" }, + { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947, upload-time = "2025-01-14T10:33:24.414Z" }, + { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778, upload-time = "2025-01-14T10:33:26.152Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716, upload-time = "2025-01-14T10:33:27.372Z" }, + { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548, upload-time = "2025-01-14T10:33:28.52Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334, upload-time = "2025-01-14T10:33:29.643Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427, upload-time = "2025-01-14T10:33:30.832Z" }, + { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774, upload-time = "2025-01-14T10:33:32.897Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308, upload-time = "2025-01-14T10:33:33.992Z" }, + { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488, upload-time = "2025-01-14T10:33:35.264Z" }, + { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776, upload-time = "2025-01-14T10:33:38.28Z" }, + { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776, upload-time = "2025-01-14T10:33:40.678Z" }, + { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420, upload-time = "2025-01-14T10:33:41.868Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199, upload-time = "2025-01-14T10:33:43.598Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307, upload-time = "2025-01-14T10:33:48.499Z" }, + { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025, upload-time = "2025-01-14T10:33:51.191Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879, upload-time = "2025-01-14T10:33:52.328Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419, upload-time = "2025-01-14T10:33:53.551Z" }, + { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773, upload-time = "2025-01-14T10:33:56.323Z" }, + { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799, upload-time = "2025-01-14T10:33:57.4Z" }, + { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821, upload-time = "2025-01-14T10:33:59.334Z" }, + { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919, upload-time = "2025-01-14T10:34:04.093Z" }, + { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721, upload-time = "2025-01-14T10:34:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899, upload-time = "2025-01-14T10:34:09.82Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222, upload-time = "2025-01-14T10:34:11.258Z" }, + { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707, upload-time = "2025-01-14T10:34:12.49Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685, upload-time = "2025-01-14T10:34:15.043Z" }, + { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567, upload-time = "2025-01-14T10:34:16.563Z" }, + { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672, upload-time = "2025-01-14T10:34:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865, upload-time = "2025-01-14T10:34:19.577Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800, upload-time = "2025-01-14T10:34:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824, upload-time = "2025-01-14T10:34:22.999Z" }, + { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920, upload-time = "2025-01-14T10:34:25.386Z" }, + { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690, upload-time = "2025-01-14T10:34:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861, upload-time = "2025-01-14T10:34:29.167Z" }, + { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174, upload-time = "2025-01-14T10:34:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721, upload-time = "2025-01-14T10:34:32.91Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763, upload-time = "2025-01-14T10:34:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585, upload-time = "2025-01-14T10:34:36.13Z" }, + { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676, upload-time = "2025-01-14T10:34:37.962Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871, upload-time = "2025-01-14T10:34:39.13Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312, upload-time = "2025-01-14T10:34:40.604Z" }, + { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062, upload-time = "2025-01-14T10:34:45.011Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155, upload-time = "2025-01-14T10:34:47.25Z" }, + { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471, upload-time = "2025-01-14T10:34:50.934Z" }, + { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208, upload-time = "2025-01-14T10:34:52.297Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339, upload-time = "2025-01-14T10:34:53.489Z" }, + { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232, upload-time = "2025-01-14T10:34:55.327Z" }, + { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476, upload-time = "2025-01-14T10:34:58.055Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377, upload-time = "2025-01-14T10:34:59.3Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986, upload-time = "2025-01-14T10:35:00.498Z" }, + { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750, upload-time = "2025-01-14T10:35:03.378Z" }, + { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594, upload-time = "2025-01-14T10:35:44.018Z" }, ] From 68286960b293a6096c888776cb9228d70878ddf0 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:24:06 +0200 Subject: [PATCH 45/78] feat: get parsing and downloading CSV to work --- src/lydata/collector/__init__.py | 64 +++++++++++++++---- src/lydata/collector/collector.js | 103 +++++++++++++++++++++++------- src/lydata/schema.py | 4 +- 3 files changed, 135 insertions(+), 36 deletions(-) diff --git a/src/lydata/collector/__init__.py b/src/lydata/collector/__init__.py index 7750f66..cc51309 100644 --- a/src/lydata/collector/__init__.py +++ b/src/lydata/collector/__init__.py @@ -1,20 +1,36 @@ """Submodule to collect data interactively using a simple web interface. -The idea is to dynamically serve a JSON schema from the `lydata.schema` module. This -can then be loaded into the `index.html` file where the `JSON Editor`_ is used to -create a form for the user to fill in. This collects a list of patient records that -will then be transformed into a :py:class:`lydata.accessor.LyDataFrame`, which the user -can then download as a CSV file. +With the simply command + +.. code-block:: bash + + uvx --from lydata lycollect + +One can start a very basic web server that serves an interactive UI at +``http://localhost:8000/``. There, one can enter patient, tumor, and lymphatic +involvement data one by one. When completed, the "submit" button will parse, validate, +and convert the data to serve a downloadable CSV file. + +This resulting CSV file is in the correct format to be used in `LyProX`_ and for +inference using our `lymph-model`_ library. + +.. _LyProX: https://lyprox.org +.. _lymph-model: https://lymph-model.readthedocs.io """ +import io from pathlib import Path from typing import Any +import pandas as pd from fastapi import FastAPI +from fastapi.responses import StreamingResponse +from loguru import logger from pydantic import RootModel from starlette.responses import FileResponse, HTMLResponse import lydata +import lydata.validator app = FastAPI( title="LyData Collector", @@ -26,6 +42,9 @@ ) BASE_DIR = Path(__file__).parent +modalities = lydata.schema.get_default_modalities() +RecordModel = lydata.schema.create_full_record_model(modalities, title="Record") +ROOT_MODEL = RootModel[list[RecordModel]] @app.get("/") @@ -39,13 +58,7 @@ def serve_index() -> HTMLResponse: @app.get("/schema") def serve_schema() -> dict[str, Any]: """Serve the JSON schema for the patient and tumor records.""" - from lydata.schema import create_full_record_model, get_default_modalities - - modalities = get_default_modalities() - schema = create_full_record_model(modalities, title="Record") - - root_schema = RootModel[list[schema]] - return root_schema.model_json_schema() + return ROOT_MODEL.model_json_schema() @app.get("/collector.js") @@ -54,10 +67,37 @@ def serve_collector_js() -> FileResponse: return FileResponse(BASE_DIR / "collector.js") +@app.post("/submit") +async def process(data: RootModel) -> StreamingResponse: + """Convert the submitted data to a DataFrame.""" + logger.info(f"Received data: {data.root}") + flattened_records = [] + + for record in data.root: + flattened_record = lydata.validator.flatten(record) + logger.debug(f"Flattened record: {flattened_record}") + flattened_records.append(flattened_record) + + df = pd.DataFrame(flattened_records) + df.columns = pd.MultiIndex.from_tuples(flattened_record.keys()) + logger.info(df.patient.core.head()) + + buffer = io.StringIO() + df.to_csv(buffer, index=False) + buffer.seek(0) + logger.success("Data prepared for download") + return StreamingResponse( + buffer, + media_type="text/csv", + headers={"Content-Disposition": "attachment; filename=lydata_records.csv"}, + ) + + def main() -> None: """Run the FastAPI app using Uvicorn.""" import uvicorn + logger.enable("lydata") uvicorn.run(app, host="127.0.0.1", port=8000) diff --git a/src/lydata/collector/collector.js b/src/lydata/collector/collector.js index b71a083..69b059f 100644 --- a/src/lydata/collector/collector.js +++ b/src/lydata/collector/collector.js @@ -1,3 +1,80 @@ +function ensureAlertExists() { + let alert = document.querySelector('.alert'); + if (!alert) { + alert = document.createElement('div'); + alert.className = 'alert alert-danger'; + document.getElementById('editor_holder').appendChild(alert); + } + return alert; +} + + +function ensureAlertRemoved() { + const existingAlert = document.querySelector('.alert'); + if (existingAlert) { + console.log('Clearing existing alert'); + existingAlert.remove(); + } +} + + +function ensureDownloadButtonRemoved() { + const existingButton = document.getElementById('download_link'); + if (existingButton) { + console.log('Clearing existing download button'); + existingButton.remove(); + } +} + + +function createDownloadButton(blob) { + ensureDownloadButtonRemoved(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.id = "download_link"; + a.href = url; + a.textContent = "Download CSV"; + a.className = "btn btn-primary"; + a.download = "lydata_records.csv"; + document.getElementById('editor_holder').appendChild(a); + console.log('Download button created:', a); +} + + +function sendEditorData(editor) { + const data = editor.getValue(); + console.log('Sending data:', data); + + fetch('/submit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data) + }) + .then(response => response.blob()) + .then(blob => { + console.log('Received processed data as blob:', blob); + createDownloadButton(blob); + }); +} + + +function processEditor(editor) { + const errors = editor.validate(); + + if (errors.length) { + console.error('Validation errors:', errors); + let alert = ensureAlertExists(); + alert.textContent = 'Validation errors: ' + errors.map(e => e.message).join(', '); + } else { + console.log('Data successfully validated'); + ensureAlertRemoved(); + sendEditorData(editor); + } +} + + fetch("/schema") .then(response => response.json()) .then(schema => { @@ -7,33 +84,15 @@ fetch("/schema") disable_edit_json: true, theme: 'bootstrap5', iconlib: 'bootstrap', + object_layout: 'grid', schema: schema }; var editor = new JSONEditor(element, options); // Hook up the submit button to log to the console - document.getElementById('submit').addEventListener('click', function () { - const errors = editor.validate(); - if (errors.length) { - console.error('Validation errors:', errors); - // display a bootstrap5 alert below the editor. Create one if it doesn't exist - let alert = document.querySelector('.alert'); - if (!alert) { - alert = document.createElement('div'); - alert.className = 'alert alert-danger'; - document.getElementById('editor_holder').appendChild(alert); - } - alert.textContent = 'Validation errors: ' + errors.map(e => e.message).join(', '); - } else { - // Clear any existing alert - const existingAlert = document.querySelector('.alert'); - if (existingAlert) { - console.log('Clearing existing alert'); - existingAlert.remove(); - } - // Get the value from the editor - console.log(editor.getValue()); - } + document.getElementById('submit').addEventListener('click', function() { + console.log('Submit button clicked'); + processEditor(editor); }); }) .catch(error => console.error('Error loading schema:', error)); diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 381c127..2e5d4b3 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -283,7 +283,7 @@ def create_full_record_model( ) -def write_schema_to_file( +def _write_schema_to_file( schema: type[BaseModel] | None = None, file_path: Path = Path("schema.json"), ) -> None: @@ -305,4 +305,4 @@ def write_schema_to_file( logger.enable("lydata") logger.remove() logger.add(sys.stderr, level="DEBUG") - write_schema_to_file() + _write_schema_to_file() From d535d8628044313f0f48dec0ad17f63b6888941a Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 13 Aug 2025 09:53:31 +0200 Subject: [PATCH 46/78] docs: add docstrings to JS code --- src/lydata/collector/collector.js | 104 ++++++++++++++++++++---------- src/lydata/collector/index.html | 2 +- 2 files changed, 70 insertions(+), 36 deletions(-) diff --git a/src/lydata/collector/collector.js b/src/lydata/collector/collector.js index 69b059f..68848ac 100644 --- a/src/lydata/collector/collector.js +++ b/src/lydata/collector/collector.js @@ -1,14 +1,32 @@ +/** + * Client-side helper functions for collecting user input through JSONEditor, + * validating it against a fetched JSON Schema, submitting the validated data + * to the backend, and presenting a downloadable CSV returned by the server. + * + * NOTE: Functionality is intentionally unchanged; only readability and + * documentation have been improved. + */ + +/** + * Ensure an alert element (used to display validation errors) exists. + * Creates and appends it if missing. + * + * @returns {HTMLDivElement} The existing or newly created alert element. + */ function ensureAlertExists() { - let alert = document.querySelector('.alert'); - if (!alert) { - alert = document.createElement('div'); - alert.className = 'alert alert-danger'; - document.getElementById('editor_holder').appendChild(alert); + let alertElement = document.querySelector('.alert'); + if (!alertElement) { + alertElement = document.createElement('div'); } - return alert; + alertElement.className = 'alert alert-danger'; + const editorHolder = document.getElementById('editor_holder'); + editorHolder.appendChild(alertElement); + return alertElement; } - +/** + * Remove an existing validation alert if present. + */ function ensureAlertRemoved() { const existingAlert = document.querySelector('.alert'); if (existingAlert) { @@ -17,7 +35,9 @@ function ensureAlertRemoved() { } } - +/** + * Remove an existing download button (if it exists) to avoid duplicates. + */ function ensureDownloadButtonRemoved() { const existingButton = document.getElementById('download_link'); if (existingButton) { @@ -26,46 +46,61 @@ function ensureDownloadButtonRemoved() { } } - +/** + * Create (or replace) a download button for a CSV blob returned by the server. + * + * @param {Blob} blob - The CSV data blob to make downloadable. + */ function createDownloadButton(blob) { ensureDownloadButtonRemoved(); + const url = window.URL.createObjectURL(blob); - const a = document.createElement("a"); - a.id = "download_link"; - a.href = url; - a.textContent = "Download CSV"; - a.className = "btn btn-primary"; - a.download = "lydata_records.csv"; - document.getElementById('editor_holder').appendChild(a); - console.log('Download button created:', a); -} + const downloadLink = document.createElement('a'); + downloadLink.id = 'download_link'; + downloadLink.href = url; + downloadLink.textContent = 'Download CSV'; + downloadLink.className = 'btn btn-success'; + downloadLink.download = 'lydata_records.csv'; + document.getElementById('editor_holder').appendChild(downloadLink); + console.log('Download button created:', downloadLink); +} +/** + * Send validated editor data to the backend for processing. Expects a CSV blob + * in response which is then exposed via a generated download button. + * + * @param {JSONEditor} editor - The JSONEditor instance from which to read data. + */ function sendEditorData(editor) { const data = editor.getValue(); console.log('Sending data:', data); fetch('/submit', { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) - .then(response => response.blob()) - .then(blob => { - console.log('Received processed data as blob:', blob); - createDownloadButton(blob); - }); + .then(response => response.blob()) + .then(blob => { + console.log('Received processed data as blob:', blob); + createDownloadButton(blob); + }); + // (Potential improvement not implemented: add .catch for network errors.) } - +/** + * Validate the editor content. If there are validation errors they are + * displayed in an alert; otherwise the data is submitted to the backend. + * + * @param {JSONEditor} editor - The JSONEditor instance to validate & submit. + */ function processEditor(editor) { const errors = editor.validate(); if (errors.length) { console.error('Validation errors:', errors); - let alert = ensureAlertExists(); + const alert = ensureAlertExists(); alert.textContent = 'Validation errors: ' + errors.map(e => e.message).join(', '); } else { console.log('Data successfully validated'); @@ -74,11 +109,10 @@ function processEditor(editor) { } } - -fetch("/schema") +// Fetch the JSON Schema to initialize the editor +fetch('/schema') .then(response => response.json()) .then(schema => { - // Initialize the editor with the fetched schema const element = document.getElementById('editor_holder'); const options = { disable_edit_json: true, @@ -86,11 +120,11 @@ fetch("/schema") iconlib: 'bootstrap', object_layout: 'grid', schema: schema - }; - var editor = new JSONEditor(element, options); + }; + const editor = new JSONEditor(element, options); - // Hook up the submit button to log to the console - document.getElementById('submit').addEventListener('click', function() { + // Bind the submit button to validation + submission flow + document.getElementById('submit').addEventListener('click', () => { console.log('Submit button clicked'); processEditor(editor); }); diff --git a/src/lydata/collector/index.html b/src/lydata/collector/index.html index 7bb0007..931dacf 100644 --- a/src/lydata/collector/index.html +++ b/src/lydata/collector/index.html @@ -17,7 +17,7 @@

LyDATA Collector

- + From bcc71e4761e60c85670225f703d8532506e2a2f9 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:19:29 +0200 Subject: [PATCH 47/78] build: remove typer dependency --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0b95d30..7da3913 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,6 @@ dependencies = [ "loguru", "roman", "fastapi[standard]>=0.116.1", - "typer>=0.16.0", ] [project.urls] From 79c5d4996b37a833afca457629d8d854acc05a33 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:51:55 +0200 Subject: [PATCH 48/78] remove: put collector in lyscripts --- pyproject.toml | 4 - src/lydata/collector/__init__.py | 105 ------------------------ src/lydata/collector/collector.js | 132 ------------------------------ src/lydata/collector/index.html | 26 ------ 4 files changed, 267 deletions(-) delete mode 100644 src/lydata/collector/__init__.py delete mode 100644 src/lydata/collector/collector.js delete mode 100644 src/lydata/collector/index.html diff --git a/pyproject.toml b/pyproject.toml index 7da3913..7d38443 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,6 @@ dependencies = [ "pydantic", "loguru", "roman", - "fastapi[standard]>=0.116.1", ] [project.urls] @@ -52,9 +51,6 @@ dev = [ "git-cliff", ] -[project.scripts] -lycollect = "lydata.collector.__init__:main" - [tool.setuptools.packages.find] where = ["src"] diff --git a/src/lydata/collector/__init__.py b/src/lydata/collector/__init__.py deleted file mode 100644 index cc51309..0000000 --- a/src/lydata/collector/__init__.py +++ /dev/null @@ -1,105 +0,0 @@ -"""Submodule to collect data interactively using a simple web interface. - -With the simply command - -.. code-block:: bash - - uvx --from lydata lycollect - -One can start a very basic web server that serves an interactive UI at -``http://localhost:8000/``. There, one can enter patient, tumor, and lymphatic -involvement data one by one. When completed, the "submit" button will parse, validate, -and convert the data to serve a downloadable CSV file. - -This resulting CSV file is in the correct format to be used in `LyProX`_ and for -inference using our `lymph-model`_ library. - -.. _LyProX: https://lyprox.org -.. _lymph-model: https://lymph-model.readthedocs.io -""" - -import io -from pathlib import Path -from typing import Any - -import pandas as pd -from fastapi import FastAPI -from fastapi.responses import StreamingResponse -from loguru import logger -from pydantic import RootModel -from starlette.responses import FileResponse, HTMLResponse - -import lydata -import lydata.validator - -app = FastAPI( - title="LyData Collector", - description=( - "A simple web interface to collect data for the LyData datasets. " - "This is a prototype and not intended for production use." - ), - version=lydata.__version__, -) - -BASE_DIR = Path(__file__).parent -modalities = lydata.schema.get_default_modalities() -RecordModel = lydata.schema.create_full_record_model(modalities, title="Record") -ROOT_MODEL = RootModel[list[RecordModel]] - - -@app.get("/") -def serve_index() -> HTMLResponse: - """Serve the index.html file.""" - with open(BASE_DIR / "index.html") as file: - content = file.read() - return HTMLResponse(content=content) - - -@app.get("/schema") -def serve_schema() -> dict[str, Any]: - """Serve the JSON schema for the patient and tumor records.""" - return ROOT_MODEL.model_json_schema() - - -@app.get("/collector.js") -def serve_collector_js() -> FileResponse: - """Serve the collector.js file.""" - return FileResponse(BASE_DIR / "collector.js") - - -@app.post("/submit") -async def process(data: RootModel) -> StreamingResponse: - """Convert the submitted data to a DataFrame.""" - logger.info(f"Received data: {data.root}") - flattened_records = [] - - for record in data.root: - flattened_record = lydata.validator.flatten(record) - logger.debug(f"Flattened record: {flattened_record}") - flattened_records.append(flattened_record) - - df = pd.DataFrame(flattened_records) - df.columns = pd.MultiIndex.from_tuples(flattened_record.keys()) - logger.info(df.patient.core.head()) - - buffer = io.StringIO() - df.to_csv(buffer, index=False) - buffer.seek(0) - logger.success("Data prepared for download") - return StreamingResponse( - buffer, - media_type="text/csv", - headers={"Content-Disposition": "attachment; filename=lydata_records.csv"}, - ) - - -def main() -> None: - """Run the FastAPI app using Uvicorn.""" - import uvicorn - - logger.enable("lydata") - uvicorn.run(app, host="127.0.0.1", port=8000) - - -if __name__ == "__main__": - main() diff --git a/src/lydata/collector/collector.js b/src/lydata/collector/collector.js deleted file mode 100644 index 68848ac..0000000 --- a/src/lydata/collector/collector.js +++ /dev/null @@ -1,132 +0,0 @@ -/** - * Client-side helper functions for collecting user input through JSONEditor, - * validating it against a fetched JSON Schema, submitting the validated data - * to the backend, and presenting a downloadable CSV returned by the server. - * - * NOTE: Functionality is intentionally unchanged; only readability and - * documentation have been improved. - */ - -/** - * Ensure an alert element (used to display validation errors) exists. - * Creates and appends it if missing. - * - * @returns {HTMLDivElement} The existing or newly created alert element. - */ -function ensureAlertExists() { - let alertElement = document.querySelector('.alert'); - if (!alertElement) { - alertElement = document.createElement('div'); - } - alertElement.className = 'alert alert-danger'; - const editorHolder = document.getElementById('editor_holder'); - editorHolder.appendChild(alertElement); - return alertElement; -} - -/** - * Remove an existing validation alert if present. - */ -function ensureAlertRemoved() { - const existingAlert = document.querySelector('.alert'); - if (existingAlert) { - console.log('Clearing existing alert'); - existingAlert.remove(); - } -} - -/** - * Remove an existing download button (if it exists) to avoid duplicates. - */ -function ensureDownloadButtonRemoved() { - const existingButton = document.getElementById('download_link'); - if (existingButton) { - console.log('Clearing existing download button'); - existingButton.remove(); - } -} - -/** - * Create (or replace) a download button for a CSV blob returned by the server. - * - * @param {Blob} blob - The CSV data blob to make downloadable. - */ -function createDownloadButton(blob) { - ensureDownloadButtonRemoved(); - - const url = window.URL.createObjectURL(blob); - const downloadLink = document.createElement('a'); - downloadLink.id = 'download_link'; - downloadLink.href = url; - downloadLink.textContent = 'Download CSV'; - downloadLink.className = 'btn btn-success'; - downloadLink.download = 'lydata_records.csv'; - - document.getElementById('editor_holder').appendChild(downloadLink); - console.log('Download button created:', downloadLink); -} - -/** - * Send validated editor data to the backend for processing. Expects a CSV blob - * in response which is then exposed via a generated download button. - * - * @param {JSONEditor} editor - The JSONEditor instance from which to read data. - */ -function sendEditorData(editor) { - const data = editor.getValue(); - console.log('Sending data:', data); - - fetch('/submit', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(data) - }) - .then(response => response.blob()) - .then(blob => { - console.log('Received processed data as blob:', blob); - createDownloadButton(blob); - }); - // (Potential improvement not implemented: add .catch for network errors.) -} - -/** - * Validate the editor content. If there are validation errors they are - * displayed in an alert; otherwise the data is submitted to the backend. - * - * @param {JSONEditor} editor - The JSONEditor instance to validate & submit. - */ -function processEditor(editor) { - const errors = editor.validate(); - - if (errors.length) { - console.error('Validation errors:', errors); - const alert = ensureAlertExists(); - alert.textContent = 'Validation errors: ' + errors.map(e => e.message).join(', '); - } else { - console.log('Data successfully validated'); - ensureAlertRemoved(); - sendEditorData(editor); - } -} - -// Fetch the JSON Schema to initialize the editor -fetch('/schema') - .then(response => response.json()) - .then(schema => { - const element = document.getElementById('editor_holder'); - const options = { - disable_edit_json: true, - theme: 'bootstrap5', - iconlib: 'bootstrap', - object_layout: 'grid', - schema: schema - }; - const editor = new JSONEditor(element, options); - - // Bind the submit button to validation + submission flow - document.getElementById('submit').addEventListener('click', () => { - console.log('Submit button clicked'); - processEditor(editor); - }); - }) - .catch(error => console.error('Error loading schema:', error)); diff --git a/src/lydata/collector/index.html b/src/lydata/collector/index.html deleted file mode 100644 index 931dacf..0000000 --- a/src/lydata/collector/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Basic JSON Editor Example - - - - - - - - -
-

LyDATA Collector

- -
- - - -
- - - From 1d5cdf84100f28792cb3ab95e40c1f0a9a42a21f Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:05:30 +0200 Subject: [PATCH 49/78] test: add another 2025-USZ patient to test cases --- tests/conftest.py | 13 + tests/test_augmentor.py | 57 +- uv.lock | 2125 ++++++++++++++------------------------- 3 files changed, 803 insertions(+), 1392 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 4160a7b..50ae6a4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,3 +18,16 @@ def clb_raw() -> pd.DataFrame: ref="4668ff6006764169411d6d198c126b020a7892b2", ), ) + + +@pytest.fixture +def usz_2025_df() -> lydata.LyDataFrame: + """Fixture to load a sample DataFrame from the USZ 2025 dataset.""" + return next( + lydata.load_datasets( + year=2025, + institution="usz", + repo_name="lycosystem/lydata.private", + ref="c11011aa928fe43f18e73e42577a0fcee5652d99", + ) + ) diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index 4e2f8e7..85819f2 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -4,7 +4,7 @@ import lydata # noqa: F401 from lydata.augmentor import combine_and_augment_levels -from lydata.utils import get_default_modalities +from lydata.utils import ModalityConfig, get_default_modalities def test_clb_patient_17(clb_raw: pd.DataFrame) -> None: @@ -79,42 +79,47 @@ def test_usz_patient_9() -> None: assert usz_aug.iloc[8].ipsi.III == False -def test_usz_patient_usz0079() -> None: +def test_2025_usz_080(usz_2025_df: lydata.LyDataFrame) -> None: """Check that this patient...""" - usz_raw = next( - lydata.load_datasets( - year=2025, - institution="usz", - subsite="hypopharynx-larynx", - use_github=True, - repo_name="lycosystem/lydata.private", - ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", - ), - ) - idx = usz_raw.ly.id == "USZ0079" - patient = usz_raw.loc[idx] + idx = usz_2025_df.ly.id == "2025-USZ-080" + patient = usz_2025_df.loc[idx] enhanced = patient.ly.enhance() assert enhanced.iloc[0].max_llh.ipsi.II == True assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIa) assert pd.isna(enhanced.iloc[0].max_llh.ipsi.IIb) -def test_2025_usz_311() -> None: +def test_2025_usz_312(usz_2025_df: lydata.LyDataFrame) -> None: """Check that this patient...""" - usz_raw = next( - lydata.load_datasets( - year=2025, - institution="usz", - use_github=True, - repo_name="lycosystem/lydata.private", - ref="4b519c6a23e9eda00fad7a1e9dedae42b161754d", - ), - ) - idx = usz_raw.ly.id == "2025-USZ-311" - patient = usz_raw.loc[idx] + idx = usz_2025_df.ly.id == "2025-USZ-312" + patient = usz_2025_df.loc[idx] assert len(patient) == 1 assert patient.ly.date.iloc[0] == "2013-06-03" enhanced = patient.ly.enhance() assert len(enhanced) == 1 assert enhanced.iloc[0].max_llh.ipsi.II == False + + +def test_2025_usz_075(usz_2025_df: lydata.LyDataFrame) -> None: + """Ensure patient 2025-USZ-075 is correctly enhanced. + + This patient has a pathologically (FNA) confirmed contra II involvement, but PET + and planning CT (pCT) are negative. Depending on the sensitivity and specificity + values, this leads to a max_llh of True or False for the contra II level. + """ + idx = usz_2025_df.ly.id == "2025-USZ-075" + patient = usz_2025_df.loc[idx] + assert len(patient) == 1 + assert patient.ly.date.iloc[0] == "2015-11-23" + assert patient.FNA.contra.II.iloc[0] == True + + enhanced = patient.ly.enhance( + modalities={ + "PET": ModalityConfig(spec=0.86, sens=0.79), + "FNA": ModalityConfig(spec=0.98, sens=0.80, kind="pathological"), + # "pCT": ModalityConfig(spec=0.86, sens=0.81), + } + ) + assert len(enhanced) == 1 + assert enhanced.iloc[0].max_llh.contra.II == True diff --git a/uv.lock b/uv.lock index 8751c6d..043f445 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 1 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", @@ -14,51 +14,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, + { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903 }, ] [[package]] name = "alabaster" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "anyio" -version = "4.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, ] [[package]] @@ -69,18 +54,18 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, ] [[package]] name = "certifi" version = "2025.6.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753, upload-time = "2025-06-15T02:45:51.329Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753 } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650, upload-time = "2025-06-15T02:45:49.977Z" }, + { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650 }, ] [[package]] @@ -90,209 +75,197 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191, upload-time = "2024-09-04T20:43:30.027Z" }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592, upload-time = "2024-09-04T20:43:32.108Z" }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024, upload-time = "2024-09-04T20:43:34.186Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188, upload-time = "2024-09-04T20:43:36.286Z" }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571, upload-time = "2024-09-04T20:43:38.586Z" }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687, upload-time = "2024-09-04T20:43:40.084Z" }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211, upload-time = "2024-09-04T20:43:41.526Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325, upload-time = "2024-09-04T20:43:43.117Z" }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784, upload-time = "2024-09-04T20:43:45.256Z" }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564, upload-time = "2024-09-04T20:43:46.779Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804, upload-time = "2024-09-04T20:43:48.186Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299, upload-time = "2024-09-04T20:43:49.812Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, ] [[package]] name = "charset-normalizer" version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/28/9901804da60055b406e1a1c5ba7aac1276fb77f1dde635aabfc7fd84b8ab/charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", size = 201818, upload-time = "2025-05-02T08:31:46.725Z" }, - { url = "https://files.pythonhosted.org/packages/d9/9b/892a8c8af9110935e5adcbb06d9c6fe741b6bb02608c6513983048ba1a18/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", size = 144649, upload-time = "2025-05-02T08:31:48.889Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a5/4179abd063ff6414223575e008593861d62abfc22455b5d1a44995b7c101/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", size = 155045, upload-time = "2025-05-02T08:31:50.757Z" }, - { url = "https://files.pythonhosted.org/packages/3b/95/bc08c7dfeddd26b4be8c8287b9bb055716f31077c8b0ea1cd09553794665/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", size = 147356, upload-time = "2025-05-02T08:31:52.634Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/7a5b635aa65284bf3eab7653e8b4151ab420ecbae918d3e359d1947b4d61/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", size = 149471, upload-time = "2025-05-02T08:31:56.207Z" }, - { url = "https://files.pythonhosted.org/packages/ae/38/51fc6ac74251fd331a8cfdb7ec57beba8c23fd5493f1050f71c87ef77ed0/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", size = 151317, upload-time = "2025-05-02T08:31:57.613Z" }, - { url = "https://files.pythonhosted.org/packages/b7/17/edee1e32215ee6e9e46c3e482645b46575a44a2d72c7dfd49e49f60ce6bf/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", size = 146368, upload-time = "2025-05-02T08:31:59.468Z" }, - { url = "https://files.pythonhosted.org/packages/26/2c/ea3e66f2b5f21fd00b2825c94cafb8c326ea6240cd80a91eb09e4a285830/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", size = 154491, upload-time = "2025-05-02T08:32:01.219Z" }, - { url = "https://files.pythonhosted.org/packages/52/47/7be7fa972422ad062e909fd62460d45c3ef4c141805b7078dbab15904ff7/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", size = 157695, upload-time = "2025-05-02T08:32:03.045Z" }, - { url = "https://files.pythonhosted.org/packages/2f/42/9f02c194da282b2b340f28e5fb60762de1151387a36842a92b533685c61e/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", size = 154849, upload-time = "2025-05-02T08:32:04.651Z" }, - { url = "https://files.pythonhosted.org/packages/67/44/89cacd6628f31fb0b63201a618049be4be2a7435a31b55b5eb1c3674547a/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", size = 150091, upload-time = "2025-05-02T08:32:06.719Z" }, - { url = "https://files.pythonhosted.org/packages/1f/79/4b8da9f712bc079c0f16b6d67b099b0b8d808c2292c937f267d816ec5ecc/charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", size = 98445, upload-time = "2025-05-02T08:32:08.66Z" }, - { url = "https://files.pythonhosted.org/packages/7d/d7/96970afb4fb66497a40761cdf7bd4f6fca0fc7bafde3a84f836c1f57a926/charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", size = 105782, upload-time = "2025-05-02T08:32:10.46Z" }, - { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, - { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, - { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, - { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, - { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, - { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, - { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, - { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, - { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, - { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, -] - -[[package]] -name = "click" -version = "8.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/28/9901804da60055b406e1a1c5ba7aac1276fb77f1dde635aabfc7fd84b8ab/charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", size = 201818 }, + { url = "https://files.pythonhosted.org/packages/d9/9b/892a8c8af9110935e5adcbb06d9c6fe741b6bb02608c6513983048ba1a18/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", size = 144649 }, + { url = "https://files.pythonhosted.org/packages/7b/a5/4179abd063ff6414223575e008593861d62abfc22455b5d1a44995b7c101/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", size = 155045 }, + { url = "https://files.pythonhosted.org/packages/3b/95/bc08c7dfeddd26b4be8c8287b9bb055716f31077c8b0ea1cd09553794665/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", size = 147356 }, + { url = "https://files.pythonhosted.org/packages/a8/2d/7a5b635aa65284bf3eab7653e8b4151ab420ecbae918d3e359d1947b4d61/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", size = 149471 }, + { url = "https://files.pythonhosted.org/packages/ae/38/51fc6ac74251fd331a8cfdb7ec57beba8c23fd5493f1050f71c87ef77ed0/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", size = 151317 }, + { url = "https://files.pythonhosted.org/packages/b7/17/edee1e32215ee6e9e46c3e482645b46575a44a2d72c7dfd49e49f60ce6bf/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", size = 146368 }, + { url = "https://files.pythonhosted.org/packages/26/2c/ea3e66f2b5f21fd00b2825c94cafb8c326ea6240cd80a91eb09e4a285830/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", size = 154491 }, + { url = "https://files.pythonhosted.org/packages/52/47/7be7fa972422ad062e909fd62460d45c3ef4c141805b7078dbab15904ff7/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", size = 157695 }, + { url = "https://files.pythonhosted.org/packages/2f/42/9f02c194da282b2b340f28e5fb60762de1151387a36842a92b533685c61e/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", size = 154849 }, + { url = "https://files.pythonhosted.org/packages/67/44/89cacd6628f31fb0b63201a618049be4be2a7435a31b55b5eb1c3674547a/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", size = 150091 }, + { url = "https://files.pythonhosted.org/packages/1f/79/4b8da9f712bc079c0f16b6d67b099b0b8d808c2292c937f267d816ec5ecc/charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", size = 98445 }, + { url = "https://files.pythonhosted.org/packages/7d/d7/96970afb4fb66497a40761cdf7bd4f6fca0fc7bafde3a84f836c1f57a926/charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", size = 105782 }, + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794 }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846 }, + { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350 }, + { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657 }, + { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260 }, + { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164 }, + { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571 }, + { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952 }, + { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959 }, + { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030 }, + { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015 }, + { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106 }, + { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402 }, + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] name = "coverage" version = "7.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/e0/98670a80884f64578f0c22cd70c5e81a6e07b08167721c7487b4d70a7ca0/coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", size = 813650, upload-time = "2025-06-13T13:02:28.627Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/78/1c1c5ec58f16817c09cbacb39783c3655d54a221b6552f47ff5ac9297603/coverage-7.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", size = 212028, upload-time = "2025-06-13T13:00:29.293Z" }, - { url = "https://files.pythonhosted.org/packages/98/db/e91b9076f3a888e3b4ad7972ea3842297a52cc52e73fd1e529856e473510/coverage-7.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", size = 212420, upload-time = "2025-06-13T13:00:34.027Z" }, - { url = "https://files.pythonhosted.org/packages/0e/d0/2b3733412954576b0aea0a16c3b6b8fbe95eb975d8bfa10b07359ead4252/coverage-7.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", size = 241529, upload-time = "2025-06-13T13:00:35.786Z" }, - { url = "https://files.pythonhosted.org/packages/b3/00/5e2e5ae2e750a872226a68e984d4d3f3563cb01d1afb449a17aa819bc2c4/coverage-7.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3", size = 239403, upload-time = "2025-06-13T13:00:37.399Z" }, - { url = "https://files.pythonhosted.org/packages/37/3b/a2c27736035156b0a7c20683afe7df498480c0dfdf503b8c878a21b6d7fb/coverage-7.9.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", size = 240548, upload-time = "2025-06-13T13:00:39.647Z" }, - { url = "https://files.pythonhosted.org/packages/98/f5/13d5fc074c3c0e0dc80422d9535814abf190f1254d7c3451590dc4f8b18c/coverage-7.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", size = 240459, upload-time = "2025-06-13T13:00:40.934Z" }, - { url = "https://files.pythonhosted.org/packages/36/24/24b9676ea06102df824c4a56ffd13dc9da7904478db519efa877d16527d5/coverage-7.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", size = 239128, upload-time = "2025-06-13T13:00:42.343Z" }, - { url = "https://files.pythonhosted.org/packages/be/05/242b7a7d491b369ac5fee7908a6e5ba42b3030450f3ad62c645b40c23e0e/coverage-7.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", size = 239402, upload-time = "2025-06-13T13:00:43.634Z" }, - { url = "https://files.pythonhosted.org/packages/73/e0/4de7f87192fa65c9c8fbaeb75507e124f82396b71de1797da5602898be32/coverage-7.9.1-cp310-cp310-win32.whl", hash = "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", size = 214518, upload-time = "2025-06-13T13:00:45.622Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ab/5e4e2fe458907d2a65fab62c773671cfc5ac704f1e7a9ddd91996f66e3c2/coverage-7.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", size = 215436, upload-time = "2025-06-13T13:00:47.245Z" }, - { url = "https://files.pythonhosted.org/packages/60/34/fa69372a07d0903a78ac103422ad34db72281c9fc625eba94ac1185da66f/coverage-7.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", size = 212146, upload-time = "2025-06-13T13:00:48.496Z" }, - { url = "https://files.pythonhosted.org/packages/27/f0/da1894915d2767f093f081c42afeba18e760f12fdd7a2f4acbe00564d767/coverage-7.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", size = 212536, upload-time = "2025-06-13T13:00:51.535Z" }, - { url = "https://files.pythonhosted.org/packages/10/d5/3fc33b06e41e390f88eef111226a24e4504d216ab8e5d1a7089aa5a3c87a/coverage-7.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", size = 245092, upload-time = "2025-06-13T13:00:52.883Z" }, - { url = "https://files.pythonhosted.org/packages/0a/39/7aa901c14977aba637b78e95800edf77f29f5a380d29768c5b66f258305b/coverage-7.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", size = 242806, upload-time = "2025-06-13T13:00:54.571Z" }, - { url = "https://files.pythonhosted.org/packages/43/fc/30e5cfeaf560b1fc1989227adedc11019ce4bb7cce59d65db34fe0c2d963/coverage-7.9.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", size = 244610, upload-time = "2025-06-13T13:00:56.932Z" }, - { url = "https://files.pythonhosted.org/packages/bf/15/cca62b13f39650bc87b2b92bb03bce7f0e79dd0bf2c7529e9fc7393e4d60/coverage-7.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", size = 244257, upload-time = "2025-06-13T13:00:58.545Z" }, - { url = "https://files.pythonhosted.org/packages/cd/1a/c0f2abe92c29e1464dbd0ff9d56cb6c88ae2b9e21becdb38bea31fcb2f6c/coverage-7.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", size = 242309, upload-time = "2025-06-13T13:00:59.836Z" }, - { url = "https://files.pythonhosted.org/packages/57/8d/c6fd70848bd9bf88fa90df2af5636589a8126d2170f3aade21ed53f2b67a/coverage-7.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", size = 242898, upload-time = "2025-06-13T13:01:02.506Z" }, - { url = "https://files.pythonhosted.org/packages/c2/9e/6ca46c7bff4675f09a66fe2797cd1ad6a24f14c9c7c3b3ebe0470a6e30b8/coverage-7.9.1-cp311-cp311-win32.whl", hash = "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", size = 214561, upload-time = "2025-06-13T13:01:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/a1/30/166978c6302010742dabcdc425fa0f938fa5a800908e39aff37a7a876a13/coverage-7.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", size = 215493, upload-time = "2025-06-13T13:01:05.702Z" }, - { url = "https://files.pythonhosted.org/packages/60/07/a6d2342cd80a5be9f0eeab115bc5ebb3917b4a64c2953534273cf9bc7ae6/coverage-7.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", size = 213869, upload-time = "2025-06-13T13:01:09.345Z" }, - { url = "https://files.pythonhosted.org/packages/68/d9/7f66eb0a8f2fce222de7bdc2046ec41cb31fe33fb55a330037833fb88afc/coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", size = 212336, upload-time = "2025-06-13T13:01:10.909Z" }, - { url = "https://files.pythonhosted.org/packages/20/20/e07cb920ef3addf20f052ee3d54906e57407b6aeee3227a9c91eea38a665/coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", size = 212571, upload-time = "2025-06-13T13:01:12.518Z" }, - { url = "https://files.pythonhosted.org/packages/78/f8/96f155de7e9e248ca9c8ff1a40a521d944ba48bec65352da9be2463745bf/coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", size = 246377, upload-time = "2025-06-13T13:01:14.87Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cf/1d783bd05b7bca5c10ded5f946068909372e94615a4416afadfe3f63492d/coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", size = 243394, upload-time = "2025-06-13T13:01:16.23Z" }, - { url = "https://files.pythonhosted.org/packages/02/dd/e7b20afd35b0a1abea09fb3998e1abc9f9bd953bee548f235aebd2b11401/coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", size = 245586, upload-time = "2025-06-13T13:01:17.532Z" }, - { url = "https://files.pythonhosted.org/packages/4e/38/b30b0006fea9d617d1cb8e43b1bc9a96af11eff42b87eb8c716cf4d37469/coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", size = 245396, upload-time = "2025-06-13T13:01:19.164Z" }, - { url = "https://files.pythonhosted.org/packages/31/e4/4d8ec1dc826e16791f3daf1b50943e8e7e1eb70e8efa7abb03936ff48418/coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", size = 243577, upload-time = "2025-06-13T13:01:22.433Z" }, - { url = "https://files.pythonhosted.org/packages/25/f4/b0e96c5c38e6e40ef465c4bc7f138863e2909c00e54a331da335faf0d81a/coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", size = 244809, upload-time = "2025-06-13T13:01:24.143Z" }, - { url = "https://files.pythonhosted.org/packages/8a/65/27e0a1fa5e2e5079bdca4521be2f5dabf516f94e29a0defed35ac2382eb2/coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", size = 214724, upload-time = "2025-06-13T13:01:25.435Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a8/d5b128633fd1a5e0401a4160d02fa15986209a9e47717174f99dc2f7166d/coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", size = 215535, upload-time = "2025-06-13T13:01:27.861Z" }, - { url = "https://files.pythonhosted.org/packages/a3/37/84bba9d2afabc3611f3e4325ee2c6a47cd449b580d4a606b240ce5a6f9bf/coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", size = 213904, upload-time = "2025-06-13T13:01:29.202Z" }, - { url = "https://files.pythonhosted.org/packages/d0/a7/a027970c991ca90f24e968999f7d509332daf6b8c3533d68633930aaebac/coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", size = 212358, upload-time = "2025-06-13T13:01:30.909Z" }, - { url = "https://files.pythonhosted.org/packages/f2/48/6aaed3651ae83b231556750280682528fea8ac7f1232834573472d83e459/coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", size = 212620, upload-time = "2025-06-13T13:01:32.256Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2a/f4b613f3b44d8b9f144847c89151992b2b6b79cbc506dee89ad0c35f209d/coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", size = 245788, upload-time = "2025-06-13T13:01:33.948Z" }, - { url = "https://files.pythonhosted.org/packages/04/d2/de4fdc03af5e4e035ef420ed26a703c6ad3d7a07aff2e959eb84e3b19ca8/coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", size = 243001, upload-time = "2025-06-13T13:01:35.285Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e8/eed18aa5583b0423ab7f04e34659e51101135c41cd1dcb33ac1d7013a6d6/coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", size = 244985, upload-time = "2025-06-13T13:01:36.712Z" }, - { url = "https://files.pythonhosted.org/packages/17/f8/ae9e5cce8885728c934eaa58ebfa8281d488ef2afa81c3dbc8ee9e6d80db/coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", size = 245152, upload-time = "2025-06-13T13:01:39.303Z" }, - { url = "https://files.pythonhosted.org/packages/5a/c8/272c01ae792bb3af9b30fac14d71d63371db227980682836ec388e2c57c0/coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", size = 243123, upload-time = "2025-06-13T13:01:40.727Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d0/2819a1e3086143c094ab446e3bdf07138527a7b88cb235c488e78150ba7a/coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", size = 244506, upload-time = "2025-06-13T13:01:42.184Z" }, - { url = "https://files.pythonhosted.org/packages/8b/4e/9f6117b89152df7b6112f65c7a4ed1f2f5ec8e60c4be8f351d91e7acc848/coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", size = 214766, upload-time = "2025-06-13T13:01:44.482Z" }, - { url = "https://files.pythonhosted.org/packages/27/0f/4b59f7c93b52c2c4ce7387c5a4e135e49891bb3b7408dcc98fe44033bbe0/coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", size = 215568, upload-time = "2025-06-13T13:01:45.772Z" }, - { url = "https://files.pythonhosted.org/packages/09/1e/9679826336f8c67b9c39a359352882b24a8a7aee48d4c9cad08d38d7510f/coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", size = 213939, upload-time = "2025-06-13T13:01:47.087Z" }, - { url = "https://files.pythonhosted.org/packages/bb/5b/5c6b4e7a407359a2e3b27bf9c8a7b658127975def62077d441b93a30dbe8/coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", size = 213079, upload-time = "2025-06-13T13:01:48.554Z" }, - { url = "https://files.pythonhosted.org/packages/a2/22/1e2e07279fd2fd97ae26c01cc2186e2258850e9ec125ae87184225662e89/coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", size = 213299, upload-time = "2025-06-13T13:01:49.997Z" }, - { url = "https://files.pythonhosted.org/packages/14/c0/4c5125a4b69d66b8c85986d3321520f628756cf524af810baab0790c7647/coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", size = 256535, upload-time = "2025-06-13T13:01:51.314Z" }, - { url = "https://files.pythonhosted.org/packages/81/8b/e36a04889dda9960be4263e95e777e7b46f1bb4fc32202612c130a20c4da/coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", size = 252756, upload-time = "2025-06-13T13:01:54.403Z" }, - { url = "https://files.pythonhosted.org/packages/98/82/be04eff8083a09a4622ecd0e1f31a2c563dbea3ed848069e7b0445043a70/coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", size = 254912, upload-time = "2025-06-13T13:01:56.769Z" }, - { url = "https://files.pythonhosted.org/packages/0f/25/c26610a2c7f018508a5ab958e5b3202d900422cf7cdca7670b6b8ca4e8df/coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", size = 256144, upload-time = "2025-06-13T13:01:58.19Z" }, - { url = "https://files.pythonhosted.org/packages/c5/8b/fb9425c4684066c79e863f1e6e7ecebb49e3a64d9f7f7860ef1688c56f4a/coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", size = 254257, upload-time = "2025-06-13T13:01:59.645Z" }, - { url = "https://files.pythonhosted.org/packages/93/df/27b882f54157fc1131e0e215b0da3b8d608d9b8ef79a045280118a8f98fe/coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", size = 255094, upload-time = "2025-06-13T13:02:01.37Z" }, - { url = "https://files.pythonhosted.org/packages/41/5f/cad1c3dbed8b3ee9e16fa832afe365b4e3eeab1fb6edb65ebbf745eabc92/coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", size = 215437, upload-time = "2025-06-13T13:02:02.905Z" }, - { url = "https://files.pythonhosted.org/packages/99/4d/fad293bf081c0e43331ca745ff63673badc20afea2104b431cdd8c278b4c/coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", size = 216605, upload-time = "2025-06-13T13:02:05.638Z" }, - { url = "https://files.pythonhosted.org/packages/1f/56/4ee027d5965fc7fc126d7ec1187529cc30cc7d740846e1ecb5e92d31b224/coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", size = 214392, upload-time = "2025-06-13T13:02:07.642Z" }, - { url = "https://files.pythonhosted.org/packages/3e/e5/c723545c3fd3204ebde3b4cc4b927dce709d3b6dc577754bb57f63ca4a4a/coverage-7.9.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", size = 204009, upload-time = "2025-06-13T13:02:25.787Z" }, - { url = "https://files.pythonhosted.org/packages/08/b8/7ddd1e8ba9701dea08ce22029917140e6f66a859427406579fd8d0ca7274/coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", size = 204000, upload-time = "2025-06-13T13:02:27.173Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e7/e0/98670a80884f64578f0c22cd70c5e81a6e07b08167721c7487b4d70a7ca0/coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", size = 813650 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/78/1c1c5ec58f16817c09cbacb39783c3655d54a221b6552f47ff5ac9297603/coverage-7.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", size = 212028 }, + { url = "https://files.pythonhosted.org/packages/98/db/e91b9076f3a888e3b4ad7972ea3842297a52cc52e73fd1e529856e473510/coverage-7.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", size = 212420 }, + { url = "https://files.pythonhosted.org/packages/0e/d0/2b3733412954576b0aea0a16c3b6b8fbe95eb975d8bfa10b07359ead4252/coverage-7.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", size = 241529 }, + { url = "https://files.pythonhosted.org/packages/b3/00/5e2e5ae2e750a872226a68e984d4d3f3563cb01d1afb449a17aa819bc2c4/coverage-7.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3", size = 239403 }, + { url = "https://files.pythonhosted.org/packages/37/3b/a2c27736035156b0a7c20683afe7df498480c0dfdf503b8c878a21b6d7fb/coverage-7.9.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", size = 240548 }, + { url = "https://files.pythonhosted.org/packages/98/f5/13d5fc074c3c0e0dc80422d9535814abf190f1254d7c3451590dc4f8b18c/coverage-7.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", size = 240459 }, + { url = "https://files.pythonhosted.org/packages/36/24/24b9676ea06102df824c4a56ffd13dc9da7904478db519efa877d16527d5/coverage-7.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", size = 239128 }, + { url = "https://files.pythonhosted.org/packages/be/05/242b7a7d491b369ac5fee7908a6e5ba42b3030450f3ad62c645b40c23e0e/coverage-7.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", size = 239402 }, + { url = "https://files.pythonhosted.org/packages/73/e0/4de7f87192fa65c9c8fbaeb75507e124f82396b71de1797da5602898be32/coverage-7.9.1-cp310-cp310-win32.whl", hash = "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", size = 214518 }, + { url = "https://files.pythonhosted.org/packages/d5/ab/5e4e2fe458907d2a65fab62c773671cfc5ac704f1e7a9ddd91996f66e3c2/coverage-7.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", size = 215436 }, + { url = "https://files.pythonhosted.org/packages/60/34/fa69372a07d0903a78ac103422ad34db72281c9fc625eba94ac1185da66f/coverage-7.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", size = 212146 }, + { url = "https://files.pythonhosted.org/packages/27/f0/da1894915d2767f093f081c42afeba18e760f12fdd7a2f4acbe00564d767/coverage-7.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", size = 212536 }, + { url = "https://files.pythonhosted.org/packages/10/d5/3fc33b06e41e390f88eef111226a24e4504d216ab8e5d1a7089aa5a3c87a/coverage-7.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", size = 245092 }, + { url = "https://files.pythonhosted.org/packages/0a/39/7aa901c14977aba637b78e95800edf77f29f5a380d29768c5b66f258305b/coverage-7.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", size = 242806 }, + { url = "https://files.pythonhosted.org/packages/43/fc/30e5cfeaf560b1fc1989227adedc11019ce4bb7cce59d65db34fe0c2d963/coverage-7.9.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", size = 244610 }, + { url = "https://files.pythonhosted.org/packages/bf/15/cca62b13f39650bc87b2b92bb03bce7f0e79dd0bf2c7529e9fc7393e4d60/coverage-7.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", size = 244257 }, + { url = "https://files.pythonhosted.org/packages/cd/1a/c0f2abe92c29e1464dbd0ff9d56cb6c88ae2b9e21becdb38bea31fcb2f6c/coverage-7.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", size = 242309 }, + { url = "https://files.pythonhosted.org/packages/57/8d/c6fd70848bd9bf88fa90df2af5636589a8126d2170f3aade21ed53f2b67a/coverage-7.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", size = 242898 }, + { url = "https://files.pythonhosted.org/packages/c2/9e/6ca46c7bff4675f09a66fe2797cd1ad6a24f14c9c7c3b3ebe0470a6e30b8/coverage-7.9.1-cp311-cp311-win32.whl", hash = "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", size = 214561 }, + { url = "https://files.pythonhosted.org/packages/a1/30/166978c6302010742dabcdc425fa0f938fa5a800908e39aff37a7a876a13/coverage-7.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", size = 215493 }, + { url = "https://files.pythonhosted.org/packages/60/07/a6d2342cd80a5be9f0eeab115bc5ebb3917b4a64c2953534273cf9bc7ae6/coverage-7.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", size = 213869 }, + { url = "https://files.pythonhosted.org/packages/68/d9/7f66eb0a8f2fce222de7bdc2046ec41cb31fe33fb55a330037833fb88afc/coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", size = 212336 }, + { url = "https://files.pythonhosted.org/packages/20/20/e07cb920ef3addf20f052ee3d54906e57407b6aeee3227a9c91eea38a665/coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", size = 212571 }, + { url = "https://files.pythonhosted.org/packages/78/f8/96f155de7e9e248ca9c8ff1a40a521d944ba48bec65352da9be2463745bf/coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", size = 246377 }, + { url = "https://files.pythonhosted.org/packages/3e/cf/1d783bd05b7bca5c10ded5f946068909372e94615a4416afadfe3f63492d/coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", size = 243394 }, + { url = "https://files.pythonhosted.org/packages/02/dd/e7b20afd35b0a1abea09fb3998e1abc9f9bd953bee548f235aebd2b11401/coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", size = 245586 }, + { url = "https://files.pythonhosted.org/packages/4e/38/b30b0006fea9d617d1cb8e43b1bc9a96af11eff42b87eb8c716cf4d37469/coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", size = 245396 }, + { url = "https://files.pythonhosted.org/packages/31/e4/4d8ec1dc826e16791f3daf1b50943e8e7e1eb70e8efa7abb03936ff48418/coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", size = 243577 }, + { url = "https://files.pythonhosted.org/packages/25/f4/b0e96c5c38e6e40ef465c4bc7f138863e2909c00e54a331da335faf0d81a/coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", size = 244809 }, + { url = "https://files.pythonhosted.org/packages/8a/65/27e0a1fa5e2e5079bdca4521be2f5dabf516f94e29a0defed35ac2382eb2/coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", size = 214724 }, + { url = "https://files.pythonhosted.org/packages/9b/a8/d5b128633fd1a5e0401a4160d02fa15986209a9e47717174f99dc2f7166d/coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", size = 215535 }, + { url = "https://files.pythonhosted.org/packages/a3/37/84bba9d2afabc3611f3e4325ee2c6a47cd449b580d4a606b240ce5a6f9bf/coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", size = 213904 }, + { url = "https://files.pythonhosted.org/packages/d0/a7/a027970c991ca90f24e968999f7d509332daf6b8c3533d68633930aaebac/coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", size = 212358 }, + { url = "https://files.pythonhosted.org/packages/f2/48/6aaed3651ae83b231556750280682528fea8ac7f1232834573472d83e459/coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", size = 212620 }, + { url = "https://files.pythonhosted.org/packages/6c/2a/f4b613f3b44d8b9f144847c89151992b2b6b79cbc506dee89ad0c35f209d/coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", size = 245788 }, + { url = "https://files.pythonhosted.org/packages/04/d2/de4fdc03af5e4e035ef420ed26a703c6ad3d7a07aff2e959eb84e3b19ca8/coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", size = 243001 }, + { url = "https://files.pythonhosted.org/packages/f5/e8/eed18aa5583b0423ab7f04e34659e51101135c41cd1dcb33ac1d7013a6d6/coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", size = 244985 }, + { url = "https://files.pythonhosted.org/packages/17/f8/ae9e5cce8885728c934eaa58ebfa8281d488ef2afa81c3dbc8ee9e6d80db/coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", size = 245152 }, + { url = "https://files.pythonhosted.org/packages/5a/c8/272c01ae792bb3af9b30fac14d71d63371db227980682836ec388e2c57c0/coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", size = 243123 }, + { url = "https://files.pythonhosted.org/packages/8c/d0/2819a1e3086143c094ab446e3bdf07138527a7b88cb235c488e78150ba7a/coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", size = 244506 }, + { url = "https://files.pythonhosted.org/packages/8b/4e/9f6117b89152df7b6112f65c7a4ed1f2f5ec8e60c4be8f351d91e7acc848/coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", size = 214766 }, + { url = "https://files.pythonhosted.org/packages/27/0f/4b59f7c93b52c2c4ce7387c5a4e135e49891bb3b7408dcc98fe44033bbe0/coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", size = 215568 }, + { url = "https://files.pythonhosted.org/packages/09/1e/9679826336f8c67b9c39a359352882b24a8a7aee48d4c9cad08d38d7510f/coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", size = 213939 }, + { url = "https://files.pythonhosted.org/packages/bb/5b/5c6b4e7a407359a2e3b27bf9c8a7b658127975def62077d441b93a30dbe8/coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", size = 213079 }, + { url = "https://files.pythonhosted.org/packages/a2/22/1e2e07279fd2fd97ae26c01cc2186e2258850e9ec125ae87184225662e89/coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", size = 213299 }, + { url = "https://files.pythonhosted.org/packages/14/c0/4c5125a4b69d66b8c85986d3321520f628756cf524af810baab0790c7647/coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", size = 256535 }, + { url = "https://files.pythonhosted.org/packages/81/8b/e36a04889dda9960be4263e95e777e7b46f1bb4fc32202612c130a20c4da/coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", size = 252756 }, + { url = "https://files.pythonhosted.org/packages/98/82/be04eff8083a09a4622ecd0e1f31a2c563dbea3ed848069e7b0445043a70/coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", size = 254912 }, + { url = "https://files.pythonhosted.org/packages/0f/25/c26610a2c7f018508a5ab958e5b3202d900422cf7cdca7670b6b8ca4e8df/coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", size = 256144 }, + { url = "https://files.pythonhosted.org/packages/c5/8b/fb9425c4684066c79e863f1e6e7ecebb49e3a64d9f7f7860ef1688c56f4a/coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", size = 254257 }, + { url = "https://files.pythonhosted.org/packages/93/df/27b882f54157fc1131e0e215b0da3b8d608d9b8ef79a045280118a8f98fe/coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", size = 255094 }, + { url = "https://files.pythonhosted.org/packages/41/5f/cad1c3dbed8b3ee9e16fa832afe365b4e3eeab1fb6edb65ebbf745eabc92/coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", size = 215437 }, + { url = "https://files.pythonhosted.org/packages/99/4d/fad293bf081c0e43331ca745ff63673badc20afea2104b431cdd8c278b4c/coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", size = 216605 }, + { url = "https://files.pythonhosted.org/packages/1f/56/4ee027d5965fc7fc126d7ec1187529cc30cc7d740846e1ecb5e92d31b224/coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", size = 214392 }, + { url = "https://files.pythonhosted.org/packages/3e/e5/c723545c3fd3204ebde3b4cc4b927dce709d3b6dc577754bb57f63ca4a4a/coverage-7.9.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", size = 204009 }, + { url = "https://files.pythonhosted.org/packages/08/b8/7ddd1e8ba9701dea08ce22029917140e6f66a859427406579fd8d0ca7274/coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", size = 204000 }, ] [package.optional-dependencies] @@ -307,44 +280,44 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890, upload-time = "2025-06-10T00:03:51.297Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712, upload-time = "2025-06-10T00:02:38.826Z" }, - { url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335, upload-time = "2025-06-10T00:02:41.64Z" }, - { url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487, upload-time = "2025-06-10T00:02:43.696Z" }, - { url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922, upload-time = "2025-06-10T00:02:45.334Z" }, - { url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433, upload-time = "2025-06-10T00:02:47.359Z" }, - { url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163, upload-time = "2025-06-10T00:02:49.412Z" }, - { url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687, upload-time = "2025-06-10T00:02:50.976Z" }, - { url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623, upload-time = "2025-06-10T00:02:52.542Z" }, - { url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447, upload-time = "2025-06-10T00:02:54.63Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830, upload-time = "2025-06-10T00:02:56.689Z" }, - { url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769, upload-time = "2025-06-10T00:02:58.467Z" }, - { url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441, upload-time = "2025-06-10T00:03:00.14Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836, upload-time = "2025-06-10T00:03:01.726Z" }, - { url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746, upload-time = "2025-06-10T00:03:03.94Z" }, - { url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456, upload-time = "2025-06-10T00:03:05.589Z" }, - { url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495, upload-time = "2025-06-10T00:03:09.172Z" }, - { url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540, upload-time = "2025-06-10T00:03:10.835Z" }, - { url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052, upload-time = "2025-06-10T00:03:12.448Z" }, - { url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024, upload-time = "2025-06-10T00:03:13.976Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442, upload-time = "2025-06-10T00:03:16.248Z" }, - { url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038, upload-time = "2025-06-10T00:03:18.4Z" }, - { url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964, upload-time = "2025-06-10T00:03:20.06Z" }, - { url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557, upload-time = "2025-06-10T00:03:22.563Z" }, - { url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508, upload-time = "2025-06-10T00:03:24.586Z" }, - { url = "https://files.pythonhosted.org/packages/16/33/b38e9d372afde56906a23839302c19abdac1c505bfb4776c1e4b07c3e145/cryptography-45.0.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a77c6fb8d76e9c9f99f2f3437c1a4ac287b34eaf40997cfab1e9bd2be175ac39", size = 3580103, upload-time = "2025-06-10T00:03:26.207Z" }, - { url = "https://files.pythonhosted.org/packages/c4/b9/357f18064ec09d4807800d05a48f92f3b369056a12f995ff79549fbb31f1/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7aad98a25ed8ac917fdd8a9c1e706e5a0956e06c498be1f713b61734333a4507", size = 4143732, upload-time = "2025-06-10T00:03:27.896Z" }, - { url = "https://files.pythonhosted.org/packages/c4/9c/7f7263b03d5db329093617648b9bd55c953de0b245e64e866e560f9aac07/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3530382a43a0e524bc931f187fc69ef4c42828cf7d7f592f7f249f602b5a4ab0", size = 4385424, upload-time = "2025-06-10T00:03:29.992Z" }, - { url = "https://files.pythonhosted.org/packages/a6/5a/6aa9d8d5073d5acc0e04e95b2860ef2684b2bd2899d8795fc443013e263b/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:6b613164cb8425e2f8db5849ffb84892e523bf6d26deb8f9bb76ae86181fa12b", size = 4142438, upload-time = "2025-06-10T00:03:31.782Z" }, - { url = "https://files.pythonhosted.org/packages/42/1c/71c638420f2cdd96d9c2b287fec515faf48679b33a2b583d0f1eda3a3375/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:96d4819e25bf3b685199b304a0029ce4a3caf98947ce8a066c9137cc78ad2c58", size = 4384622, upload-time = "2025-06-10T00:03:33.491Z" }, - { url = "https://files.pythonhosted.org/packages/ef/ab/e3a055c34e97deadbf0d846e189237d3385dca99e1a7e27384c3b2292041/cryptography-45.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b97737a3ffbea79eebb062eb0d67d72307195035332501722a9ca86bab9e3ab2", size = 3328911, upload-time = "2025-06-10T00:03:35.035Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ba/cf442ae99ef363855ed84b39e0fb3c106ac66b7a7703f3c9c9cfe05412cb/cryptography-45.0.4-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4828190fb6c4bcb6ebc6331f01fe66ae838bb3bd58e753b59d4b22eb444b996c", size = 3590512, upload-time = "2025-06-10T00:03:36.982Z" }, - { url = "https://files.pythonhosted.org/packages/28/9a/a7d5bb87d149eb99a5abdc69a41e4e47b8001d767e5f403f78bfaafc7aa7/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03dbff8411206713185b8cebe31bc5c0eb544799a50c09035733716b386e61a4", size = 4146899, upload-time = "2025-06-10T00:03:38.659Z" }, - { url = "https://files.pythonhosted.org/packages/17/11/9361c2c71c42cc5c465cf294c8030e72fb0c87752bacbd7a3675245e3db3/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51dfbd4d26172d31150d84c19bbe06c68ea4b7f11bbc7b3a5e146b367c311349", size = 4388900, upload-time = "2025-06-10T00:03:40.233Z" }, - { url = "https://files.pythonhosted.org/packages/c0/76/f95b83359012ee0e670da3e41c164a0c256aeedd81886f878911581d852f/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:0339a692de47084969500ee455e42c58e449461e0ec845a34a6a9b9bf7df7fb8", size = 4146422, upload-time = "2025-06-10T00:03:41.827Z" }, - { url = "https://files.pythonhosted.org/packages/09/ad/5429fcc4def93e577a5407988f89cf15305e64920203d4ac14601a9dc876/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:0cf13c77d710131d33e63626bd55ae7c0efb701ebdc2b3a7952b9b23a0412862", size = 4388475, upload-time = "2025-06-10T00:03:43.493Z" }, - { url = "https://files.pythonhosted.org/packages/99/49/0ab9774f64555a1b50102757811508f5ace451cf5dc0a2d074a4b9deca6a/cryptography-45.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bbc505d1dc469ac12a0a064214879eac6294038d6b24ae9f71faae1448a9608d", size = 3337594, upload-time = "2025-06-10T00:03:45.523Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712 }, + { url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335 }, + { url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487 }, + { url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922 }, + { url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433 }, + { url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163 }, + { url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687 }, + { url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623 }, + { url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447 }, + { url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830 }, + { url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769 }, + { url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441 }, + { url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836 }, + { url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746 }, + { url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456 }, + { url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495 }, + { url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540 }, + { url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052 }, + { url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024 }, + { url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442 }, + { url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038 }, + { url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964 }, + { url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557 }, + { url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508 }, + { url = "https://files.pythonhosted.org/packages/16/33/b38e9d372afde56906a23839302c19abdac1c505bfb4776c1e4b07c3e145/cryptography-45.0.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a77c6fb8d76e9c9f99f2f3437c1a4ac287b34eaf40997cfab1e9bd2be175ac39", size = 3580103 }, + { url = "https://files.pythonhosted.org/packages/c4/b9/357f18064ec09d4807800d05a48f92f3b369056a12f995ff79549fbb31f1/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7aad98a25ed8ac917fdd8a9c1e706e5a0956e06c498be1f713b61734333a4507", size = 4143732 }, + { url = "https://files.pythonhosted.org/packages/c4/9c/7f7263b03d5db329093617648b9bd55c953de0b245e64e866e560f9aac07/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3530382a43a0e524bc931f187fc69ef4c42828cf7d7f592f7f249f602b5a4ab0", size = 4385424 }, + { url = "https://files.pythonhosted.org/packages/a6/5a/6aa9d8d5073d5acc0e04e95b2860ef2684b2bd2899d8795fc443013e263b/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:6b613164cb8425e2f8db5849ffb84892e523bf6d26deb8f9bb76ae86181fa12b", size = 4142438 }, + { url = "https://files.pythonhosted.org/packages/42/1c/71c638420f2cdd96d9c2b287fec515faf48679b33a2b583d0f1eda3a3375/cryptography-45.0.4-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:96d4819e25bf3b685199b304a0029ce4a3caf98947ce8a066c9137cc78ad2c58", size = 4384622 }, + { url = "https://files.pythonhosted.org/packages/ef/ab/e3a055c34e97deadbf0d846e189237d3385dca99e1a7e27384c3b2292041/cryptography-45.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b97737a3ffbea79eebb062eb0d67d72307195035332501722a9ca86bab9e3ab2", size = 3328911 }, + { url = "https://files.pythonhosted.org/packages/ea/ba/cf442ae99ef363855ed84b39e0fb3c106ac66b7a7703f3c9c9cfe05412cb/cryptography-45.0.4-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4828190fb6c4bcb6ebc6331f01fe66ae838bb3bd58e753b59d4b22eb444b996c", size = 3590512 }, + { url = "https://files.pythonhosted.org/packages/28/9a/a7d5bb87d149eb99a5abdc69a41e4e47b8001d767e5f403f78bfaafc7aa7/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03dbff8411206713185b8cebe31bc5c0eb544799a50c09035733716b386e61a4", size = 4146899 }, + { url = "https://files.pythonhosted.org/packages/17/11/9361c2c71c42cc5c465cf294c8030e72fb0c87752bacbd7a3675245e3db3/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51dfbd4d26172d31150d84c19bbe06c68ea4b7f11bbc7b3a5e146b367c311349", size = 4388900 }, + { url = "https://files.pythonhosted.org/packages/c0/76/f95b83359012ee0e670da3e41c164a0c256aeedd81886f878911581d852f/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:0339a692de47084969500ee455e42c58e449461e0ec845a34a6a9b9bf7df7fb8", size = 4146422 }, + { url = "https://files.pythonhosted.org/packages/09/ad/5429fcc4def93e577a5407988f89cf15305e64920203d4ac14601a9dc876/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:0cf13c77d710131d33e63626bd55ae7c0efb701ebdc2b3a7952b9b23a0412862", size = 4388475 }, + { url = "https://files.pythonhosted.org/packages/99/49/0ab9774f64555a1b50102757811508f5ace451cf5dc0a2d074a4b9deca6a/cryptography-45.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bbc505d1dc469ac12a0a064214879eac6294038d6b24ae9f71faae1448a9608d", size = 3337594 }, ] [[package]] @@ -354,49 +327,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744, upload-time = "2025-01-27T10:46:25.7Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998, upload-time = "2025-01-27T10:46:09.186Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 }, ] [[package]] name = "distlib" version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload-time = "2024-10-09T18:35:47.551Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" }, -] - -[[package]] -name = "dnspython" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, ] [[package]] name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, -] - -[[package]] -name = "email-validator" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dnspython" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967, upload-time = "2024-06-20T11:30:30.034Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521, upload-time = "2024-06-20T11:30:28.248Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, ] [[package]] @@ -406,206 +357,71 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, -] - -[[package]] -name = "fastapi" -version = "0.116.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic" }, - { name = "starlette" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485, upload-time = "2025-07-11T16:22:32.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631, upload-time = "2025-07-11T16:22:30.485Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "email-validator" }, - { name = "fastapi-cli", extra = ["standard"] }, - { name = "httpx" }, - { name = "jinja2" }, - { name = "python-multipart" }, - { name = "uvicorn", extra = ["standard"] }, -] - -[[package]] -name = "fastapi-cli" -version = "0.0.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "rich-toolkit" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c6/94/3ef75d9c7c32936ecb539b9750ccbdc3d2568efd73b1cb913278375f4533/fastapi_cli-0.0.8.tar.gz", hash = "sha256:2360f2989b1ab4a3d7fc8b3a0b20e8288680d8af2e31de7c38309934d7f8a0ee", size = 16884, upload-time = "2025-07-07T14:44:09.326Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/3f/6ad3103c5f59208baf4c798526daea6a74085bb35d1c161c501863470476/fastapi_cli-0.0.8-py3-none-any.whl", hash = "sha256:0ea95d882c85b9219a75a65ab27e8da17dac02873e456850fa0a726e96e985eb", size = 10770, upload-time = "2025-07-07T14:44:08.255Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "fastapi-cloud-cli" }, - { name = "uvicorn", extra = ["standard"] }, -] - -[[package]] -name = "fastapi-cloud-cli" -version = "0.1.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx" }, - { name = "pydantic", extra = ["email"] }, - { name = "rich-toolkit" }, - { name = "rignore" }, - { name = "sentry-sdk" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/2e/3b6e5016affc310e5109bc580f760586eabecea0c8a7ab067611cd849ac0/fastapi_cloud_cli-0.1.5.tar.gz", hash = "sha256:341ee585eb731a6d3c3656cb91ad38e5f39809bf1a16d41de1333e38635a7937", size = 22710, upload-time = "2025-07-28T13:30:48.216Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/a6/5aa862489a2918a096166fd98d9fe86b7fd53c607678b3fa9d8c432d88d5/fastapi_cloud_cli-0.1.5-py3-none-any.whl", hash = "sha256:d80525fb9c0e8af122370891f9fa83cf5d496e4ad47a8dd26c0496a6c85a012a", size = 18992, upload-time = "2025-07-28T13:30:47.427Z" }, + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674 }, ] [[package]] name = "filelock" version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, ] [[package]] name = "git-cliff" version = "2.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/4b/e5569d967c9428e04db1439557d4c0f3d8bf6341815fa68cf01c0f37d0a6/git_cliff-2.9.1.tar.gz", hash = "sha256:5b9e69b29f076984ebf88489bddedd45c87f54ad354866e7fc031d87a7686a25", size = 92495, upload-time = "2025-06-03T11:12:13.947Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/ec/81b536dc79faa796f341b9d6551dc250278b577b17e5193bd19eea938597/git_cliff-2.9.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:220620392ccd6c12a49f816baaea530c32d96b54fce0ebdb7b688b4ba38a0627", size = 6455305, upload-time = "2025-06-03T11:11:52.177Z" }, - { url = "https://files.pythonhosted.org/packages/91/46/054f94b678d66bf56040b88ad496a7f7e89a83f0a5539f63a6552133d5f4/git_cliff-2.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f0790924301176bcf6cab274d4d8b791ffc6791a6541929c29a2c81a10ca0d82", size = 5982424, upload-time = "2025-06-03T11:11:54.829Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ac/9a393624c11e736ebed6f83e2b1a0e622d88315eaf51204192987adfe8cc/git_cliff-2.9.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74afc8b388f32f4661e81c758218578cd7fef36fcc60ffe035027f8eb7b9f9c6", size = 6351400, upload-time = "2025-06-03T11:11:57.272Z" }, - { url = "https://files.pythonhosted.org/packages/51/67/0cdb7c20acebbe1c9c278cc5a4a8b119ccf765fb278cbb4a4a6a614115c3/git_cliff-2.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cee37c70b0ce28d39ad64bdc8eb9d09e415722fd040f61362c5a8c0a85a5161", size = 6805681, upload-time = "2025-06-03T11:12:01.023Z" }, - { url = "https://files.pythonhosted.org/packages/4c/af/213d98b64d0b0bf63d4580f01ef2de521f06883dfdde8e292446e6b5db59/git_cliff-2.9.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:555493177f69b4471996f3a80c1f05c3203789080dde96c7b5a05f05aa3f7c49", size = 6410027, upload-time = "2025-06-03T11:12:02.95Z" }, - { url = "https://files.pythonhosted.org/packages/33/64/3c995aeae2b94cce75faa7a86677aeaf157539733319739537f1fc163196/git_cliff-2.9.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:45dfefb7f4589fa73a8ae95bfadb233988f64098a08ecd3724334ae58121e004", size = 6584265, upload-time = "2025-06-03T11:12:05.477Z" }, - { url = "https://files.pythonhosted.org/packages/96/bd/2843e660b7f5e28b6bc1001af2ca9a76887ea19bef0b6a2788566f443fc8/git_cliff-2.9.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:067a5112999bdb917dcd9cd4b195f32cb0fcd1a0161035f443c02a3536252727", size = 7037288, upload-time = "2025-06-03T11:12:08.051Z" }, - { url = "https://files.pythonhosted.org/packages/7f/83/0d8308c50b6100e438c89cbfe292d1d243edc1ac2a0eeb79da90351dbd51/git_cliff-2.9.1-py3-none-win32.whl", hash = "sha256:bd15d7a5b6c69546454fd5f89b091e6210fa9c24abc5c0d86c2662b7896ec55f", size = 6041354, upload-time = "2025-06-03T11:12:10.048Z" }, - { url = "https://files.pythonhosted.org/packages/73/09/2a9b5731ab7f8e9813c934177ed71e8d293618b54649e9566c2080d1652e/git_cliff-2.9.1-py3-none-win_amd64.whl", hash = "sha256:840f02dff8adcaecb3dd76bb01cea947633b71341cf42716965d3611f3f315d9", size = 6825745, upload-time = "2025-06-03T11:12:11.986Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httptools" -version = "0.6.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/9a/ce5e1f7e131522e6d3426e8e7a490b3a01f39a6696602e1c4f33f9e94277/httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", size = 240639, upload-time = "2024-10-16T19:45:08.902Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/6f/972f8eb0ea7d98a1c6be436e2142d51ad2a64ee18e02b0e7ff1f62171ab1/httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0", size = 198780, upload-time = "2024-10-16T19:44:06.882Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b0/17c672b4bc5c7ba7f201eada4e96c71d0a59fbc185e60e42580093a86f21/httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da", size = 103297, upload-time = "2024-10-16T19:44:08.129Z" }, - { url = "https://files.pythonhosted.org/packages/92/5e/b4a826fe91971a0b68e8c2bd4e7db3e7519882f5a8ccdb1194be2b3ab98f/httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1", size = 443130, upload-time = "2024-10-16T19:44:09.45Z" }, - { url = "https://files.pythonhosted.org/packages/b0/51/ce61e531e40289a681a463e1258fa1e05e0be54540e40d91d065a264cd8f/httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50", size = 442148, upload-time = "2024-10-16T19:44:11.539Z" }, - { url = "https://files.pythonhosted.org/packages/ea/9e/270b7d767849b0c96f275c695d27ca76c30671f8eb8cc1bab6ced5c5e1d0/httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959", size = 415949, upload-time = "2024-10-16T19:44:13.388Z" }, - { url = "https://files.pythonhosted.org/packages/81/86/ced96e3179c48c6f656354e106934e65c8963d48b69be78f355797f0e1b3/httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4", size = 417591, upload-time = "2024-10-16T19:44:15.258Z" }, - { url = "https://files.pythonhosted.org/packages/75/73/187a3f620ed3175364ddb56847d7a608a6fc42d551e133197098c0143eca/httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c", size = 88344, upload-time = "2024-10-16T19:44:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/7b/26/bb526d4d14c2774fe07113ca1db7255737ffbb119315839af2065abfdac3/httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069", size = 199029, upload-time = "2024-10-16T19:44:18.427Z" }, - { url = "https://files.pythonhosted.org/packages/a6/17/3e0d3e9b901c732987a45f4f94d4e2c62b89a041d93db89eafb262afd8d5/httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a", size = 103492, upload-time = "2024-10-16T19:44:19.515Z" }, - { url = "https://files.pythonhosted.org/packages/b7/24/0fe235d7b69c42423c7698d086d4db96475f9b50b6ad26a718ef27a0bce6/httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975", size = 462891, upload-time = "2024-10-16T19:44:21.067Z" }, - { url = "https://files.pythonhosted.org/packages/b1/2f/205d1f2a190b72da6ffb5f41a3736c26d6fa7871101212b15e9b5cd8f61d/httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636", size = 459788, upload-time = "2024-10-16T19:44:22.958Z" }, - { url = "https://files.pythonhosted.org/packages/6e/4c/d09ce0eff09057a206a74575ae8f1e1e2f0364d20e2442224f9e6612c8b9/httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721", size = 433214, upload-time = "2024-10-16T19:44:24.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/84c9e23edbccc4a4c6f96a1b8d99dfd2350289e94f00e9ccc7aadde26fb5/httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988", size = 434120, upload-time = "2024-10-16T19:44:26.295Z" }, - { url = "https://files.pythonhosted.org/packages/d0/46/4d8e7ba9581416de1c425b8264e2cadd201eb709ec1584c381f3e98f51c1/httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17", size = 88565, upload-time = "2024-10-16T19:44:29.188Z" }, - { url = "https://files.pythonhosted.org/packages/bb/0e/d0b71465c66b9185f90a091ab36389a7352985fe857e352801c39d6127c8/httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2", size = 200683, upload-time = "2024-10-16T19:44:30.175Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b8/412a9bb28d0a8988de3296e01efa0bd62068b33856cdda47fe1b5e890954/httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44", size = 104337, upload-time = "2024-10-16T19:44:31.786Z" }, - { url = "https://files.pythonhosted.org/packages/9b/01/6fb20be3196ffdc8eeec4e653bc2a275eca7f36634c86302242c4fbb2760/httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1", size = 508796, upload-time = "2024-10-16T19:44:32.825Z" }, - { url = "https://files.pythonhosted.org/packages/f7/d8/b644c44acc1368938317d76ac991c9bba1166311880bcc0ac297cb9d6bd7/httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2", size = 510837, upload-time = "2024-10-16T19:44:33.974Z" }, - { url = "https://files.pythonhosted.org/packages/52/d8/254d16a31d543073a0e57f1c329ca7378d8924e7e292eda72d0064987486/httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81", size = 485289, upload-time = "2024-10-16T19:44:35.111Z" }, - { url = "https://files.pythonhosted.org/packages/5f/3c/4aee161b4b7a971660b8be71a92c24d6c64372c1ab3ae7f366b3680df20f/httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", size = 489779, upload-time = "2024-10-16T19:44:36.253Z" }, - { url = "https://files.pythonhosted.org/packages/12/b7/5cae71a8868e555f3f67a50ee7f673ce36eac970f029c0c5e9d584352961/httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970", size = 88634, upload-time = "2024-10-16T19:44:37.357Z" }, - { url = "https://files.pythonhosted.org/packages/94/a3/9fe9ad23fd35f7de6b91eeb60848986058bd8b5a5c1e256f5860a160cc3e/httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", size = 197214, upload-time = "2024-10-16T19:44:38.738Z" }, - { url = "https://files.pythonhosted.org/packages/ea/d9/82d5e68bab783b632023f2fa31db20bebb4e89dfc4d2293945fd68484ee4/httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", size = 102431, upload-time = "2024-10-16T19:44:39.818Z" }, - { url = "https://files.pythonhosted.org/packages/96/c1/cb499655cbdbfb57b577734fde02f6fa0bbc3fe9fb4d87b742b512908dff/httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", size = 473121, upload-time = "2024-10-16T19:44:41.189Z" }, - { url = "https://files.pythonhosted.org/packages/af/71/ee32fd358f8a3bb199b03261f10921716990808a675d8160b5383487a317/httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", size = 473805, upload-time = "2024-10-16T19:44:42.384Z" }, - { url = "https://files.pythonhosted.org/packages/8a/0a/0d4df132bfca1507114198b766f1737d57580c9ad1cf93c1ff673e3387be/httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", size = 448858, upload-time = "2024-10-16T19:44:43.959Z" }, - { url = "https://files.pythonhosted.org/packages/1e/6a/787004fdef2cabea27bad1073bf6a33f2437b4dbd3b6fb4a9d71172b1c7c/httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", size = 452042, upload-time = "2024-10-16T19:44:45.071Z" }, - { url = "https://files.pythonhosted.org/packages/4d/dc/7decab5c404d1d2cdc1bb330b1bf70e83d6af0396fd4fc76fc60c0d522bf/httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", size = 87682, upload-time = "2024-10-16T19:44:46.46Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/4b/e5569d967c9428e04db1439557d4c0f3d8bf6341815fa68cf01c0f37d0a6/git_cliff-2.9.1.tar.gz", hash = "sha256:5b9e69b29f076984ebf88489bddedd45c87f54ad354866e7fc031d87a7686a25", size = 92495 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ec/81b536dc79faa796f341b9d6551dc250278b577b17e5193bd19eea938597/git_cliff-2.9.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:220620392ccd6c12a49f816baaea530c32d96b54fce0ebdb7b688b4ba38a0627", size = 6455305 }, + { url = "https://files.pythonhosted.org/packages/91/46/054f94b678d66bf56040b88ad496a7f7e89a83f0a5539f63a6552133d5f4/git_cliff-2.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f0790924301176bcf6cab274d4d8b791ffc6791a6541929c29a2c81a10ca0d82", size = 5982424 }, + { url = "https://files.pythonhosted.org/packages/0f/ac/9a393624c11e736ebed6f83e2b1a0e622d88315eaf51204192987adfe8cc/git_cliff-2.9.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74afc8b388f32f4661e81c758218578cd7fef36fcc60ffe035027f8eb7b9f9c6", size = 6351400 }, + { url = "https://files.pythonhosted.org/packages/51/67/0cdb7c20acebbe1c9c278cc5a4a8b119ccf765fb278cbb4a4a6a614115c3/git_cliff-2.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cee37c70b0ce28d39ad64bdc8eb9d09e415722fd040f61362c5a8c0a85a5161", size = 6805681 }, + { url = "https://files.pythonhosted.org/packages/4c/af/213d98b64d0b0bf63d4580f01ef2de521f06883dfdde8e292446e6b5db59/git_cliff-2.9.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:555493177f69b4471996f3a80c1f05c3203789080dde96c7b5a05f05aa3f7c49", size = 6410027 }, + { url = "https://files.pythonhosted.org/packages/33/64/3c995aeae2b94cce75faa7a86677aeaf157539733319739537f1fc163196/git_cliff-2.9.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:45dfefb7f4589fa73a8ae95bfadb233988f64098a08ecd3724334ae58121e004", size = 6584265 }, + { url = "https://files.pythonhosted.org/packages/96/bd/2843e660b7f5e28b6bc1001af2ca9a76887ea19bef0b6a2788566f443fc8/git_cliff-2.9.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:067a5112999bdb917dcd9cd4b195f32cb0fcd1a0161035f443c02a3536252727", size = 7037288 }, + { url = "https://files.pythonhosted.org/packages/7f/83/0d8308c50b6100e438c89cbfe292d1d243edc1ac2a0eeb79da90351dbd51/git_cliff-2.9.1-py3-none-win32.whl", hash = "sha256:bd15d7a5b6c69546454fd5f89b091e6210fa9c24abc5c0d86c2662b7896ec55f", size = 6041354 }, + { url = "https://files.pythonhosted.org/packages/73/09/2a9b5731ab7f8e9813c934177ed71e8d293618b54649e9566c2080d1652e/git_cliff-2.9.1-py3-none-win_amd64.whl", hash = "sha256:840f02dff8adcaecb3dd76bb01cea947633b71341cf42716965d3611f3f315d9", size = 6825745 }, ] [[package]] name = "identify" version = "2.6.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload-time = "2025-05-23T20:37:53.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload-time = "2025-05-23T20:37:51.495Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145 }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] [[package]] name = "imagesize" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] [[package]] @@ -615,9 +431,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, ] [[package]] @@ -627,9 +443,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "uc-micro-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946, upload-time = "2024-02-04T14:48:04.179Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820, upload-time = "2024-02-04T14:48:02.496Z" }, + { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820 }, ] [[package]] @@ -640,16 +456,15 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "win32-setctime", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, ] [[package]] name = "lydata" source = { editable = "." } dependencies = [ - { name = "fastapi", extra = ["standard"] }, { name = "loguru" }, { name = "mistletoe" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -659,7 +474,6 @@ dependencies = [ { name = "pydantic" }, { name = "pygithub" }, { name = "roman" }, - { name = "typer" }, ] [package.optional-dependencies] @@ -682,7 +496,6 @@ tests = [ [package.metadata] requires-dist = [ - { name = "fastapi", extras = ["standard"], specifier = ">=0.116.1" }, { name = "git-cliff", marker = "extra == 'dev'" }, { name = "loguru" }, { name = "mistletoe" }, @@ -699,7 +512,6 @@ requires-dist = [ { name = "sphinx", marker = "extra == 'docs'" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, { name = "sphinx-book-theme", marker = "extra == 'docs'" }, - { name = "typer", specifier = ">=0.16.0" }, ] provides-extras = ["docs", "tests", "dev"] @@ -710,67 +522,67 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, - { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, - { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, - { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, - { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, - { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, - { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, - { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, - { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] [[package]] @@ -780,36 +592,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542, upload-time = "2024-09-09T20:27:49.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316, upload-time = "2024-09-09T20:27:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316 }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, ] [[package]] name = "mistletoe" version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/96/ea46a376a7c4cd56955ecdfff0ea68de43996a4e6d1aee4599729453bd11/mistletoe-1.4.0.tar.gz", hash = "sha256:1630f906e5e4bbe66fdeb4d29d277e2ea515d642bb18a9b49b136361a9818c9d", size = 107203, upload-time = "2024-07-14T10:17:35.212Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/96/ea46a376a7c4cd56955ecdfff0ea68de43996a4e6d1aee4599729453bd11/mistletoe-1.4.0.tar.gz", hash = "sha256:1630f906e5e4bbe66fdeb4d29d277e2ea515d642bb18a9b49b136361a9818c9d", size = 107203 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/0f/b5e545f0c7962be90366af3418989b12cf441d9da1e5d89d88f2f3e5cf8f/mistletoe-1.4.0-py3-none-any.whl", hash = "sha256:44a477803861de1237ba22e375c6b617690a31d2902b47279d1f8f7ed498a794", size = 51304, upload-time = "2024-07-14T10:17:33.243Z" }, + { url = "https://files.pythonhosted.org/packages/2a/0f/b5e545f0c7962be90366af3418989b12cf441d9da1e5d89d88f2f3e5cf8f/mistletoe-1.4.0-py3-none-any.whl", hash = "sha256:44a477803861de1237ba22e375c6b617690a31d2902b47279d1f8f7ed498a794", size = 51304 }, ] [[package]] name = "mypy-extensions" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, ] [[package]] @@ -825,9 +637,9 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579, upload-time = "2025-02-12T10:53:02.078Z" }, + { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579 }, ] [package.optional-dependencies] @@ -839,9 +651,9 @@ linkify = [ name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, ] [[package]] @@ -851,62 +663,62 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, ] [[package]] @@ -917,67 +729,67 @@ resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813, upload-time = "2025-06-07T14:54:32.608Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/5f/df67435257d827eb3b8af66f585223dc2c3f2eb7ad0b50cb1dae2f35f494/numpy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3c9fdde0fa18afa1099d6257eb82890ea4f3102847e692193b54e00312a9ae9", size = 21199688, upload-time = "2025-06-07T14:36:52.067Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ce/aad219575055d6c9ef29c8c540c81e1c38815d3be1fe09cdbe53d48ee838/numpy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46d16f72c2192da7b83984aa5455baee640e33a9f1e61e656f29adf55e406c2b", size = 14359277, upload-time = "2025-06-07T14:37:15.325Z" }, - { url = "https://files.pythonhosted.org/packages/29/6b/2d31da8e6d2ec99bed54c185337a87f8fbeccc1cd9804e38217e92f3f5e2/numpy-2.3.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a0be278be9307c4ab06b788f2a077f05e180aea817b3e41cebbd5aaf7bd85ed3", size = 5376069, upload-time = "2025-06-07T14:37:25.636Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2a/6c59a062397553ec7045c53d5fcdad44e4536e54972faa2ba44153bca984/numpy-2.3.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:99224862d1412d2562248d4710126355d3a8db7672170a39d6909ac47687a8a4", size = 6913057, upload-time = "2025-06-07T14:37:37.215Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5a/8df16f258d28d033e4f359e29d3aeb54663243ac7b71504e89deeb813202/numpy-2.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2393a914db64b0ead0ab80c962e42d09d5f385802006a6c87835acb1f58adb96", size = 14568083, upload-time = "2025-06-07T14:37:59.337Z" }, - { url = "https://files.pythonhosted.org/packages/0a/92/0528a563dfc2cdccdcb208c0e241a4bb500d7cde218651ffb834e8febc50/numpy-2.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7729c8008d55e80784bd113787ce876ca117185c579c0d626f59b87d433ea779", size = 16929402, upload-time = "2025-06-07T14:38:24.343Z" }, - { url = "https://files.pythonhosted.org/packages/e4/2f/e7a8c8d4a2212c527568d84f31587012cf5497a7271ea1f23332142f634e/numpy-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:06d4fb37a8d383b769281714897420c5cc3545c79dc427df57fc9b852ee0bf58", size = 15879193, upload-time = "2025-06-07T14:38:48.007Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c3/dada3f005953847fe35f42ac0fe746f6e1ea90b4c6775e4be605dcd7b578/numpy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c39ec392b5db5088259c68250e342612db82dc80ce044cf16496cf14cf6bc6f8", size = 18665318, upload-time = "2025-06-07T14:39:15.794Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ae/3f448517dedefc8dd64d803f9d51a8904a48df730e00a3c5fb1e75a60620/numpy-2.3.0-cp311-cp311-win32.whl", hash = "sha256:ee9d3ee70d62827bc91f3ea5eee33153212c41f639918550ac0475e3588da59f", size = 6601108, upload-time = "2025-06-07T14:39:27.176Z" }, - { url = "https://files.pythonhosted.org/packages/8c/4a/556406d2bb2b9874c8cbc840c962683ac28f21efbc9b01177d78f0199ca1/numpy-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:43c55b6a860b0eb44d42341438b03513cf3879cb3617afb749ad49307e164edd", size = 13021525, upload-time = "2025-06-07T14:39:46.637Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ee/bf54278aef30335ffa9a189f869ea09e1a195b3f4b93062164a3b02678a7/numpy-2.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2e6a1409eee0cb0316cb64640a49a49ca44deb1a537e6b1121dc7c458a1299a8", size = 10170327, upload-time = "2025-06-07T14:40:02.703Z" }, - { url = "https://files.pythonhosted.org/packages/89/59/9df493df81ac6f76e9f05cdbe013cdb0c9a37b434f6e594f5bd25e278908/numpy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:389b85335838155a9076e9ad7f8fdba0827496ec2d2dc32ce69ce7898bde03ba", size = 20897025, upload-time = "2025-06-07T14:40:33.558Z" }, - { url = "https://files.pythonhosted.org/packages/2f/86/4ff04335901d6cf3a6bb9c748b0097546ae5af35e455ae9b962ebff4ecd7/numpy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9498f60cd6bb8238d8eaf468a3d5bb031d34cd12556af53510f05fcf581c1b7e", size = 14129882, upload-time = "2025-06-07T14:40:55.034Z" }, - { url = "https://files.pythonhosted.org/packages/71/8d/a942cd4f959de7f08a79ab0c7e6cecb7431d5403dce78959a726f0f57aa1/numpy-2.3.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:622a65d40d8eb427d8e722fd410ac3ad4958002f109230bc714fa551044ebae2", size = 5110181, upload-time = "2025-06-07T14:41:04.4Z" }, - { url = "https://files.pythonhosted.org/packages/86/5d/45850982efc7b2c839c5626fb67fbbc520d5b0d7c1ba1ae3651f2f74c296/numpy-2.3.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b9446d9d8505aadadb686d51d838f2b6688c9e85636a0c3abaeb55ed54756459", size = 6647581, upload-time = "2025-06-07T14:41:14.695Z" }, - { url = "https://files.pythonhosted.org/packages/1a/c0/c871d4a83f93b00373d3eebe4b01525eee8ef10b623a335ec262b58f4dc1/numpy-2.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:50080245365d75137a2bf46151e975de63146ae6d79f7e6bd5c0e85c9931d06a", size = 14262317, upload-time = "2025-06-07T14:41:35.862Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f6/bc47f5fa666d5ff4145254f9e618d56e6a4ef9b874654ca74c19113bb538/numpy-2.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c24bb4113c66936eeaa0dc1e47c74770453d34f46ee07ae4efd853a2ed1ad10a", size = 16633919, upload-time = "2025-06-07T14:42:00.622Z" }, - { url = "https://files.pythonhosted.org/packages/f5/b4/65f48009ca0c9b76df5f404fccdea5a985a1bb2e34e97f21a17d9ad1a4ba/numpy-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d294287fdf685281e671886c6dcdf0291a7c19db3e5cb4178d07ccf6ecc67", size = 15567651, upload-time = "2025-06-07T14:42:24.429Z" }, - { url = "https://files.pythonhosted.org/packages/f1/62/5367855a2018578e9334ed08252ef67cc302e53edc869666f71641cad40b/numpy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6295f81f093b7f5769d1728a6bd8bf7466de2adfa771ede944ce6711382b89dc", size = 18361723, upload-time = "2025-06-07T14:42:51.167Z" }, - { url = "https://files.pythonhosted.org/packages/d4/75/5baed8cd867eabee8aad1e74d7197d73971d6a3d40c821f1848b8fab8b84/numpy-2.3.0-cp312-cp312-win32.whl", hash = "sha256:e6648078bdd974ef5d15cecc31b0c410e2e24178a6e10bf511e0557eed0f2570", size = 6318285, upload-time = "2025-06-07T14:43:02.052Z" }, - { url = "https://files.pythonhosted.org/packages/bc/49/d5781eaa1a15acb3b3a3f49dc9e2ff18d92d0ce5c2976f4ab5c0a7360250/numpy-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:0898c67a58cdaaf29994bc0e2c65230fd4de0ac40afaf1584ed0b02cd74c6fdd", size = 12732594, upload-time = "2025-06-07T14:43:21.071Z" }, - { url = "https://files.pythonhosted.org/packages/c2/1c/6d343e030815c7c97a1f9fbad00211b47717c7fe446834c224bd5311e6f1/numpy-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:bd8df082b6c4695753ad6193018c05aac465d634834dca47a3ae06d4bb22d9ea", size = 9891498, upload-time = "2025-06-07T14:43:36.332Z" }, - { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633, upload-time = "2025-06-07T14:44:06.839Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683, upload-time = "2025-06-07T14:44:28.847Z" }, - { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683, upload-time = "2025-06-07T14:44:38.417Z" }, - { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253, upload-time = "2025-06-07T14:44:49.359Z" }, - { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658, upload-time = "2025-06-07T14:45:10.156Z" }, - { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765, upload-time = "2025-06-07T14:45:35.076Z" }, - { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335, upload-time = "2025-06-07T14:45:58.797Z" }, - { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608, upload-time = "2025-06-07T14:46:25.687Z" }, - { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005, upload-time = "2025-06-07T14:50:13.138Z" }, - { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093, upload-time = "2025-06-07T14:50:31.82Z" }, - { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689, upload-time = "2025-06-07T14:50:47.888Z" }, - { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612, upload-time = "2025-06-07T14:46:56.077Z" }, - { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953, upload-time = "2025-06-07T14:47:18.053Z" }, - { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806, upload-time = "2025-06-07T14:47:27.524Z" }, - { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169, upload-time = "2025-06-07T14:47:38.057Z" }, - { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701, upload-time = "2025-06-07T14:47:59.113Z" }, - { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983, upload-time = "2025-06-07T14:48:24.196Z" }, - { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435, upload-time = "2025-06-07T14:48:47.712Z" }, - { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798, upload-time = "2025-06-07T14:49:14.866Z" }, - { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632, upload-time = "2025-06-07T14:49:25.67Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491, upload-time = "2025-06-07T14:49:44.898Z" }, - { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345, upload-time = "2025-06-07T14:50:02.311Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a2/f8c1133f90eaa1c11bbbec1dc28a42054d0ce74bc2c9838c5437ba5d4980/numpy-2.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80b46117c7359de8167cc00a2c7d823bdd505e8c7727ae0871025a86d668283b", size = 21070759, upload-time = "2025-06-07T14:51:18.241Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e0/4c05fc44ba28463096eee5ae2a12832c8d2759cc5bcec34ae33386d3ff83/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:5814a0f43e70c061f47abd5857d120179609ddc32a613138cbb6c4e9e2dbdda5", size = 5301054, upload-time = "2025-06-07T14:51:27.413Z" }, - { url = "https://files.pythonhosted.org/packages/8a/3b/6c06cdebe922bbc2a466fe2105f50f661238ea223972a69c7deb823821e7/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ef6c1e88fd6b81ac6d215ed71dc8cd027e54d4bf1d2682d362449097156267a2", size = 6817520, upload-time = "2025-06-07T14:51:38.015Z" }, - { url = "https://files.pythonhosted.org/packages/9d/a3/1e536797fd10eb3c5dbd2e376671667c9af19e241843548575267242ea02/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33a5a12a45bb82d9997e2c0b12adae97507ad7c347546190a18ff14c28bbca12", size = 14398078, upload-time = "2025-06-07T14:52:00.122Z" }, - { url = "https://files.pythonhosted.org/packages/7c/61/9d574b10d9368ecb1a0c923952aa593510a20df4940aa615b3a71337c8db/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:54dfc8681c1906d239e95ab1508d0a533c4a9505e52ee2d71a5472b04437ef97", size = 16751324, upload-time = "2025-06-07T14:52:25.077Z" }, - { url = "https://files.pythonhosted.org/packages/39/de/bcad52ce972dc26232629ca3a99721fd4b22c1d2bda84d5db6541913ef9c/numpy-2.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e017a8a251ff4d18d71f139e28bdc7c31edba7a507f72b1414ed902cbe48c74d", size = 12924237, upload-time = "2025-06-07T14:52:44.713Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5f/df67435257d827eb3b8af66f585223dc2c3f2eb7ad0b50cb1dae2f35f494/numpy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3c9fdde0fa18afa1099d6257eb82890ea4f3102847e692193b54e00312a9ae9", size = 21199688 }, + { url = "https://files.pythonhosted.org/packages/e5/ce/aad219575055d6c9ef29c8c540c81e1c38815d3be1fe09cdbe53d48ee838/numpy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46d16f72c2192da7b83984aa5455baee640e33a9f1e61e656f29adf55e406c2b", size = 14359277 }, + { url = "https://files.pythonhosted.org/packages/29/6b/2d31da8e6d2ec99bed54c185337a87f8fbeccc1cd9804e38217e92f3f5e2/numpy-2.3.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a0be278be9307c4ab06b788f2a077f05e180aea817b3e41cebbd5aaf7bd85ed3", size = 5376069 }, + { url = "https://files.pythonhosted.org/packages/7d/2a/6c59a062397553ec7045c53d5fcdad44e4536e54972faa2ba44153bca984/numpy-2.3.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:99224862d1412d2562248d4710126355d3a8db7672170a39d6909ac47687a8a4", size = 6913057 }, + { url = "https://files.pythonhosted.org/packages/d5/5a/8df16f258d28d033e4f359e29d3aeb54663243ac7b71504e89deeb813202/numpy-2.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2393a914db64b0ead0ab80c962e42d09d5f385802006a6c87835acb1f58adb96", size = 14568083 }, + { url = "https://files.pythonhosted.org/packages/0a/92/0528a563dfc2cdccdcb208c0e241a4bb500d7cde218651ffb834e8febc50/numpy-2.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7729c8008d55e80784bd113787ce876ca117185c579c0d626f59b87d433ea779", size = 16929402 }, + { url = "https://files.pythonhosted.org/packages/e4/2f/e7a8c8d4a2212c527568d84f31587012cf5497a7271ea1f23332142f634e/numpy-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:06d4fb37a8d383b769281714897420c5cc3545c79dc427df57fc9b852ee0bf58", size = 15879193 }, + { url = "https://files.pythonhosted.org/packages/e2/c3/dada3f005953847fe35f42ac0fe746f6e1ea90b4c6775e4be605dcd7b578/numpy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c39ec392b5db5088259c68250e342612db82dc80ce044cf16496cf14cf6bc6f8", size = 18665318 }, + { url = "https://files.pythonhosted.org/packages/3b/ae/3f448517dedefc8dd64d803f9d51a8904a48df730e00a3c5fb1e75a60620/numpy-2.3.0-cp311-cp311-win32.whl", hash = "sha256:ee9d3ee70d62827bc91f3ea5eee33153212c41f639918550ac0475e3588da59f", size = 6601108 }, + { url = "https://files.pythonhosted.org/packages/8c/4a/556406d2bb2b9874c8cbc840c962683ac28f21efbc9b01177d78f0199ca1/numpy-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:43c55b6a860b0eb44d42341438b03513cf3879cb3617afb749ad49307e164edd", size = 13021525 }, + { url = "https://files.pythonhosted.org/packages/ed/ee/bf54278aef30335ffa9a189f869ea09e1a195b3f4b93062164a3b02678a7/numpy-2.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2e6a1409eee0cb0316cb64640a49a49ca44deb1a537e6b1121dc7c458a1299a8", size = 10170327 }, + { url = "https://files.pythonhosted.org/packages/89/59/9df493df81ac6f76e9f05cdbe013cdb0c9a37b434f6e594f5bd25e278908/numpy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:389b85335838155a9076e9ad7f8fdba0827496ec2d2dc32ce69ce7898bde03ba", size = 20897025 }, + { url = "https://files.pythonhosted.org/packages/2f/86/4ff04335901d6cf3a6bb9c748b0097546ae5af35e455ae9b962ebff4ecd7/numpy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9498f60cd6bb8238d8eaf468a3d5bb031d34cd12556af53510f05fcf581c1b7e", size = 14129882 }, + { url = "https://files.pythonhosted.org/packages/71/8d/a942cd4f959de7f08a79ab0c7e6cecb7431d5403dce78959a726f0f57aa1/numpy-2.3.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:622a65d40d8eb427d8e722fd410ac3ad4958002f109230bc714fa551044ebae2", size = 5110181 }, + { url = "https://files.pythonhosted.org/packages/86/5d/45850982efc7b2c839c5626fb67fbbc520d5b0d7c1ba1ae3651f2f74c296/numpy-2.3.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b9446d9d8505aadadb686d51d838f2b6688c9e85636a0c3abaeb55ed54756459", size = 6647581 }, + { url = "https://files.pythonhosted.org/packages/1a/c0/c871d4a83f93b00373d3eebe4b01525eee8ef10b623a335ec262b58f4dc1/numpy-2.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:50080245365d75137a2bf46151e975de63146ae6d79f7e6bd5c0e85c9931d06a", size = 14262317 }, + { url = "https://files.pythonhosted.org/packages/b7/f6/bc47f5fa666d5ff4145254f9e618d56e6a4ef9b874654ca74c19113bb538/numpy-2.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c24bb4113c66936eeaa0dc1e47c74770453d34f46ee07ae4efd853a2ed1ad10a", size = 16633919 }, + { url = "https://files.pythonhosted.org/packages/f5/b4/65f48009ca0c9b76df5f404fccdea5a985a1bb2e34e97f21a17d9ad1a4ba/numpy-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d294287fdf685281e671886c6dcdf0291a7c19db3e5cb4178d07ccf6ecc67", size = 15567651 }, + { url = "https://files.pythonhosted.org/packages/f1/62/5367855a2018578e9334ed08252ef67cc302e53edc869666f71641cad40b/numpy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6295f81f093b7f5769d1728a6bd8bf7466de2adfa771ede944ce6711382b89dc", size = 18361723 }, + { url = "https://files.pythonhosted.org/packages/d4/75/5baed8cd867eabee8aad1e74d7197d73971d6a3d40c821f1848b8fab8b84/numpy-2.3.0-cp312-cp312-win32.whl", hash = "sha256:e6648078bdd974ef5d15cecc31b0c410e2e24178a6e10bf511e0557eed0f2570", size = 6318285 }, + { url = "https://files.pythonhosted.org/packages/bc/49/d5781eaa1a15acb3b3a3f49dc9e2ff18d92d0ce5c2976f4ab5c0a7360250/numpy-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:0898c67a58cdaaf29994bc0e2c65230fd4de0ac40afaf1584ed0b02cd74c6fdd", size = 12732594 }, + { url = "https://files.pythonhosted.org/packages/c2/1c/6d343e030815c7c97a1f9fbad00211b47717c7fe446834c224bd5311e6f1/numpy-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:bd8df082b6c4695753ad6193018c05aac465d634834dca47a3ae06d4bb22d9ea", size = 9891498 }, + { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633 }, + { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683 }, + { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683 }, + { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253 }, + { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658 }, + { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765 }, + { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335 }, + { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608 }, + { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005 }, + { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093 }, + { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689 }, + { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612 }, + { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953 }, + { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806 }, + { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169 }, + { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701 }, + { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983 }, + { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435 }, + { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798 }, + { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632 }, + { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491 }, + { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 }, + { url = "https://files.pythonhosted.org/packages/6a/a2/f8c1133f90eaa1c11bbbec1dc28a42054d0ce74bc2c9838c5437ba5d4980/numpy-2.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80b46117c7359de8167cc00a2c7d823bdd505e8c7727ae0871025a86d668283b", size = 21070759 }, + { url = "https://files.pythonhosted.org/packages/6c/e0/4c05fc44ba28463096eee5ae2a12832c8d2759cc5bcec34ae33386d3ff83/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:5814a0f43e70c061f47abd5857d120179609ddc32a613138cbb6c4e9e2dbdda5", size = 5301054 }, + { url = "https://files.pythonhosted.org/packages/8a/3b/6c06cdebe922bbc2a466fe2105f50f661238ea223972a69c7deb823821e7/numpy-2.3.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ef6c1e88fd6b81ac6d215ed71dc8cd027e54d4bf1d2682d362449097156267a2", size = 6817520 }, + { url = "https://files.pythonhosted.org/packages/9d/a3/1e536797fd10eb3c5dbd2e376671667c9af19e241843548575267242ea02/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33a5a12a45bb82d9997e2c0b12adae97507ad7c347546190a18ff14c28bbca12", size = 14398078 }, + { url = "https://files.pythonhosted.org/packages/7c/61/9d574b10d9368ecb1a0c923952aa593510a20df4940aa615b3a71337c8db/numpy-2.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:54dfc8681c1906d239e95ab1508d0a533c4a9505e52ee2d71a5472b04437ef97", size = 16751324 }, + { url = "https://files.pythonhosted.org/packages/39/de/bcad52ce972dc26232629ca3a99721fd4b22c1d2bda84d5db6541913ef9c/numpy-2.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e017a8a251ff4d18d71f139e28bdc7c31edba7a507f72b1414ed902cbe48c74d", size = 12924237 }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] @@ -991,42 +803,42 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531, upload-time = "2025-06-05T03:25:48.648Z" }, - { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764, upload-time = "2025-06-05T03:25:53.228Z" }, - { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963, upload-time = "2025-06-05T03:25:56.855Z" }, - { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446, upload-time = "2025-06-05T03:26:01.292Z" }, - { url = "https://files.pythonhosted.org/packages/f7/fc/17851e1b1ea0c8456ba90a2f514c35134dd56d981cf30ccdc501a0adeac4/pandas-2.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", size = 12920002, upload-time = "2025-06-06T00:00:07.925Z" }, - { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218, upload-time = "2025-06-05T03:26:09.731Z" }, - { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485, upload-time = "2025-06-05T03:26:17.572Z" }, - { url = "https://files.pythonhosted.org/packages/96/1e/ba313812a699fe37bf62e6194265a4621be11833f5fce46d9eae22acb5d7/pandas-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", size = 11551836, upload-time = "2025-06-05T03:26:22.784Z" }, - { url = "https://files.pythonhosted.org/packages/1b/cc/0af9c07f8d714ea563b12383a7e5bde9479cf32413ee2f346a9c5a801f22/pandas-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef", size = 10807977, upload-time = "2025-06-05T16:50:11.109Z" }, - { url = "https://files.pythonhosted.org/packages/ee/3e/8c0fb7e2cf4a55198466ced1ca6a9054ae3b7e7630df7757031df10001fd/pandas-2.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d", size = 11788230, upload-time = "2025-06-05T03:26:27.417Z" }, - { url = "https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", size = 12370423, upload-time = "2025-06-05T03:26:34.142Z" }, - { url = "https://files.pythonhosted.org/packages/9f/74/b012addb34cda5ce855218a37b258c4e056a0b9b334d116e518d72638737/pandas-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33", size = 12990594, upload-time = "2025-06-06T00:00:13.934Z" }, - { url = "https://files.pythonhosted.org/packages/95/81/b310e60d033ab64b08e66c635b94076488f0b6ce6a674379dd5b224fc51c/pandas-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", size = 13745952, upload-time = "2025-06-05T03:26:39.475Z" }, - { url = "https://files.pythonhosted.org/packages/25/ac/f6ee5250a8881b55bd3aecde9b8cfddea2f2b43e3588bca68a4e9aaf46c8/pandas-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", size = 11094534, upload-time = "2025-06-05T03:26:43.23Z" }, - { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865, upload-time = "2025-06-05T03:26:46.774Z" }, - { url = "https://files.pythonhosted.org/packages/9f/cc/ae8ea3b800757a70c9fdccc68b67dc0280a6e814efcf74e4211fd5dea1ca/pandas-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", size = 10702154, upload-time = "2025-06-05T16:50:14.439Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ba/a7883d7aab3d24c6540a2768f679e7414582cc389876d469b40ec749d78b/pandas-2.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", size = 11262180, upload-time = "2025-06-05T16:50:17.453Z" }, - { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493, upload-time = "2025-06-05T03:26:51.813Z" }, - { url = "https://files.pythonhosted.org/packages/d7/bf/0213986830a92d44d55153c1d69b509431a972eb73f204242988c4e66e86/pandas-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", size = 12470733, upload-time = "2025-06-06T00:00:18.651Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406, upload-time = "2025-06-05T03:26:55.992Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199, upload-time = "2025-06-05T03:26:59.594Z" }, - { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913, upload-time = "2025-06-05T03:27:02.757Z" }, - { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249, upload-time = "2025-06-05T16:50:20.17Z" }, - { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359, upload-time = "2025-06-05T03:27:06.431Z" }, - { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789, upload-time = "2025-06-05T03:27:09.875Z" }, - { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734, upload-time = "2025-06-06T00:00:22.246Z" }, - { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381, upload-time = "2025-06-05T03:27:15.641Z" }, - { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135, upload-time = "2025-06-05T03:27:24.131Z" }, - { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356, upload-time = "2025-06-05T03:27:34.547Z" }, - { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674, upload-time = "2025-06-05T03:27:39.448Z" }, - { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876, upload-time = "2025-06-05T03:27:43.652Z" }, - { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182, upload-time = "2025-06-05T03:27:47.652Z" }, - { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686, upload-time = "2025-06-06T00:00:26.142Z" }, - { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847, upload-time = "2025-06-05T03:27:51.465Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531 }, + { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764 }, + { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963 }, + { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446 }, + { url = "https://files.pythonhosted.org/packages/f7/fc/17851e1b1ea0c8456ba90a2f514c35134dd56d981cf30ccdc501a0adeac4/pandas-2.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", size = 12920002 }, + { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218 }, + { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485 }, + { url = "https://files.pythonhosted.org/packages/96/1e/ba313812a699fe37bf62e6194265a4621be11833f5fce46d9eae22acb5d7/pandas-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", size = 11551836 }, + { url = "https://files.pythonhosted.org/packages/1b/cc/0af9c07f8d714ea563b12383a7e5bde9479cf32413ee2f346a9c5a801f22/pandas-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef", size = 10807977 }, + { url = "https://files.pythonhosted.org/packages/ee/3e/8c0fb7e2cf4a55198466ced1ca6a9054ae3b7e7630df7757031df10001fd/pandas-2.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d", size = 11788230 }, + { url = "https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", size = 12370423 }, + { url = "https://files.pythonhosted.org/packages/9f/74/b012addb34cda5ce855218a37b258c4e056a0b9b334d116e518d72638737/pandas-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33", size = 12990594 }, + { url = "https://files.pythonhosted.org/packages/95/81/b310e60d033ab64b08e66c635b94076488f0b6ce6a674379dd5b224fc51c/pandas-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", size = 13745952 }, + { url = "https://files.pythonhosted.org/packages/25/ac/f6ee5250a8881b55bd3aecde9b8cfddea2f2b43e3588bca68a4e9aaf46c8/pandas-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", size = 11094534 }, + { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865 }, + { url = "https://files.pythonhosted.org/packages/9f/cc/ae8ea3b800757a70c9fdccc68b67dc0280a6e814efcf74e4211fd5dea1ca/pandas-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", size = 10702154 }, + { url = "https://files.pythonhosted.org/packages/d8/ba/a7883d7aab3d24c6540a2768f679e7414582cc389876d469b40ec749d78b/pandas-2.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", size = 11262180 }, + { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493 }, + { url = "https://files.pythonhosted.org/packages/d7/bf/0213986830a92d44d55153c1d69b509431a972eb73f204242988c4e66e86/pandas-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", size = 12470733 }, + { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406 }, + { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199 }, + { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913 }, + { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249 }, + { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359 }, + { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789 }, + { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734 }, + { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381 }, + { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135 }, + { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356 }, + { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674 }, + { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876 }, + { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182 }, + { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686 }, + { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, ] [[package]] @@ -1040,27 +852,27 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspect" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/4e/9eaf279c32058839361085faf203d728967d0fe1d6229dd989139bdb34e0/pandera-0.24.0.tar.gz", hash = "sha256:154231780643bc73b121bd976b0ada9dcebb3e065c622954fd099dc299cf44bd", size = 513238, upload-time = "2025-05-15T14:08:47.596Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/4e/9eaf279c32058839361085faf203d728967d0fe1d6229dd989139bdb34e0/pandera-0.24.0.tar.gz", hash = "sha256:154231780643bc73b121bd976b0ada9dcebb3e065c622954fd099dc299cf44bd", size = 513238 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/4d/ec550fbb5fe09a7c0a93a3f9b2d87446f728c1ef052f786b195eb4620def/pandera-0.24.0-py3-none-any.whl", hash = "sha256:3b7de575b43a4aa03a1561802be4ee0c7471e49153684fe327f7bbea0724b02b", size = 267092, upload-time = "2025-05-15T14:08:45.77Z" }, + { url = "https://files.pythonhosted.org/packages/e9/4d/ec550fbb5fe09a7c0a93a3f9b2d87446f728c1ef052f786b195eb4620def/pandera-0.24.0-py3-none-any.whl", hash = "sha256:3b7de575b43a4aa03a1561802be4ee0c7471e49153684fe327f7bbea0724b02b", size = 267092 }, ] [[package]] name = "platformdirs" version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] [[package]] @@ -1074,18 +886,18 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload-time = "2025-03-18T21:35:20.987Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload-time = "2025-03-18T21:35:19.343Z" }, + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, ] [[package]] @@ -1098,14 +910,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, -] - -[package.optional-dependencies] -email = [ - { name = "email-validator" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 }, ] [[package]] @@ -1115,84 +922,84 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" }, - { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" }, - { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817 }, + { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357 }, + { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011 }, + { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730 }, + { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178 }, + { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462 }, + { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652 }, + { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306 }, + { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720 }, + { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915 }, + { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884 }, + { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496 }, + { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019 }, + { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584 }, + { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071 }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823 }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792 }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998 }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200 }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890 }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359 }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883 }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074 }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538 }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909 }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786 }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, + { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982 }, + { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412 }, + { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749 }, + { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225 }, + { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490 }, + { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525 }, + { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446 }, + { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678 }, + { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200 }, + { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123 }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852 }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484 }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896 }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475 }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013 }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715 }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757 }, ] [[package]] @@ -1210,9 +1017,9 @@ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/67/ea/3ab478cccacc2e8ef69892c42c44ae547bae089f356c4b47caf61730958d/pydata_sphinx_theme-0.15.4.tar.gz", hash = "sha256:7762ec0ac59df3acecf49fd2f889e1b4565dbce8b88b2e29ee06fdd90645a06d", size = 2400673, upload-time = "2024-06-25T19:28:45.041Z" } +sdist = { url = "https://files.pythonhosted.org/packages/67/ea/3ab478cccacc2e8ef69892c42c44ae547bae089f356c4b47caf61730958d/pydata_sphinx_theme-0.15.4.tar.gz", hash = "sha256:7762ec0ac59df3acecf49fd2f889e1b4565dbce8b88b2e29ee06fdd90645a06d", size = 2400673 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl", hash = "sha256:2136ad0e9500d0949f96167e63f3e298620040aea8f9c74621959eda5d4cf8e6", size = 4640157, upload-time = "2024-06-25T19:28:42.383Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl", hash = "sha256:2136ad0e9500d0949f96167e63f3e298620040aea8f9c74621959eda5d4cf8e6", size = 4640157 }, ] [[package]] @@ -1227,27 +1034,27 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/88/e08ab18dc74b2916f48703ed1a797d57cb64eca0e23b0a9254e13cfe3911/pygithub-2.6.1.tar.gz", hash = "sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf", size = 3659473, upload-time = "2025-02-21T13:45:58.262Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/88/e08ab18dc74b2916f48703ed1a797d57cb64eca0e23b0a9254e13cfe3911/pygithub-2.6.1.tar.gz", hash = "sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf", size = 3659473 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl", hash = "sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3", size = 410451, upload-time = "2025-02-21T13:45:55.519Z" }, + { url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl", hash = "sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3", size = 410451 }, ] [[package]] name = "pygments" version = "2.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, ] [[package]] name = "pyjwt" version = "2.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, ] [package.optional-dependencies] @@ -1262,17 +1069,17 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854, upload-time = "2022-01-07T22:05:41.134Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920, upload-time = "2022-01-07T22:05:49.156Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722, upload-time = "2022-01-07T22:05:50.989Z" }, - { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087, upload-time = "2022-01-07T22:05:52.539Z" }, - { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678, upload-time = "2022-01-07T22:05:54.251Z" }, - { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660, upload-time = "2022-01-07T22:05:56.056Z" }, - { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824, upload-time = "2022-01-07T22:05:57.434Z" }, - { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912, upload-time = "2022-01-07T22:05:58.665Z" }, - { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624, upload-time = "2022-01-07T22:06:00.085Z" }, - { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload-time = "2022-01-07T22:06:01.861Z" }, + { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920 }, + { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722 }, + { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087 }, + { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678 }, + { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660 }, + { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824 }, + { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912 }, + { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624 }, + { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141 }, ] [[package]] @@ -1288,9 +1095,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714 } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474 }, ] [[package]] @@ -1302,9 +1109,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644 }, ] [[package]] @@ -1314,80 +1121,62 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[package]] -name = "python-dotenv" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" }, -] - -[[package]] -name = "python-multipart" -version = "0.0.20" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] [[package]] name = "pytz" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] [[package]] @@ -1400,206 +1189,54 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, -] - -[[package]] -name = "rich" -version = "14.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, -] - -[[package]] -name = "rich-toolkit" -version = "0.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "rich" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/65/36/cdb3d51371ad0cccbf1541506304783bd72d55790709b8eb68c0d401a13a/rich_toolkit-0.15.0.tar.gz", hash = "sha256:3f5730e9f2d36d0bfe01cf723948b7ecf4cc355d2b71e2c00e094f7963128c09", size = 115118, upload-time = "2025-08-11T10:55:37.909Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/e4/b0794eefb3cf78566b15e5bf576492c1d4a92ce5f6da55675bc11e9ef5d8/rich_toolkit-0.15.0-py3-none-any.whl", hash = "sha256:ddb91008283d4a7989fd8ff0324a48773a7a2276229c6a3070755645538ef1bb", size = 29062, upload-time = "2025-08-11T10:55:37.152Z" }, -] - -[[package]] -name = "rignore" -version = "0.6.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/46/05a94dc55ac03cf931d18e43b86ecee5ee054cb88b7853fffd741e35009c/rignore-0.6.4.tar.gz", hash = "sha256:e893fdd2d7fdcfa9407d0b7600ef2c2e2df97f55e1c45d4a8f54364829ddb0ab", size = 11633, upload-time = "2025-07-19T19:24:46.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/27/55ec2871e42c0a01669f7741598a5948f04bd32f3975478a0bead9e7e251/rignore-0.6.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c201375cfe76e56e61fcdfe50d0882aafb49544b424bfc828e0508dc9fbc431b", size = 888088, upload-time = "2025-07-19T19:23:50.776Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e0/6be3d7adf91f7d67f08833a29dea4f7c345554b385f9a797c397f6685f29/rignore-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4962d537e377394292c4828e1e9c620618dd8daa49ba746abe533733a89f8644", size = 824159, upload-time = "2025-07-19T19:23:44.395Z" }, - { url = "https://files.pythonhosted.org/packages/99/b7/fbb56b8cfa27971f9a19e87769dae0cb648343226eddda94ded32be2afc3/rignore-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a6dd2f213cff6ca3c4d257fa3f5b0c7d4f6c23fe83bf292425fbe8d0c9c908a", size = 892493, upload-time = "2025-07-19T19:22:32.061Z" }, - { url = "https://files.pythonhosted.org/packages/d5/cf/21f130801c29c1fcf22f00a41d7530cef576819ee1a26c86bdb7bb06a0f2/rignore-0.6.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:64d379193f86a21fc93762783f36651927f54d5eea54c4922fdccb5e37076ed2", size = 872810, upload-time = "2025-07-19T19:22:45.554Z" }, - { url = "https://files.pythonhosted.org/packages/e4/4a/474a627263ef13a0ac28a0ce3a20932fbe41f6043f7280da47c7aca1f586/rignore-0.6.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53c4f8682cf645b7a9160e0f1786af3201ed54a020bb4abd515c970043387127", size = 1160488, upload-time = "2025-07-19T19:22:58.359Z" }, - { url = "https://files.pythonhosted.org/packages/0b/c7/a10c180f77cbb456ab483c28e52efd6166cee787f11d21cb1d369b89e961/rignore-0.6.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af1246e672bd835a17d3ae91579b3c235ec55b10924ef22608d3e9ec90fa2699", size = 938780, upload-time = "2025-07-19T19:23:10.604Z" }, - { url = "https://files.pythonhosted.org/packages/32/68/8e67701e8cc9f157f12b3742e14f14e395c7f3a497720c7f6aab7e5cdec4/rignore-0.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82eed48fbc3097af418862e3c5c26fa81aa993e0d8b5f3a0a9a29cc6975eedff", size = 950347, upload-time = "2025-07-19T19:23:33.759Z" }, - { url = "https://files.pythonhosted.org/packages/1e/11/8eef123a2d029ed697b119806a0ca8a99d9457500c40b4d26cd21860eb89/rignore-0.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df1215a071d42fd857fb6363c13803fbd915d48eaeaa9b103fb2266ba89c8995", size = 976679, upload-time = "2025-07-19T19:23:23.813Z" }, - { url = "https://files.pythonhosted.org/packages/09/7e/9584f4e4b3c1587ae09f286a14dab2376895d782be632289d151cb952432/rignore-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:82f2d318e66756066ed664015d8ca720078ab1d319377f1f61e3f4d01325faea", size = 1067469, upload-time = "2025-07-19T19:23:57.616Z" }, - { url = "https://files.pythonhosted.org/packages/c3/2c/d3515693b89c47761822219bb519cefd0cd45a38ff82c35a4ccdd8e95deb/rignore-0.6.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e7d4258fc81051097c4d4c6ad17f0100c40088dbd2c6c31fc3c888a1d5a16190", size = 1136199, upload-time = "2025-07-19T19:24:09.922Z" }, - { url = "https://files.pythonhosted.org/packages/e7/39/94ea41846547ebb87d16527a3e978c8918632a060f77669a492f8a90b8b9/rignore-0.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a0d0b9ec7929df8fd35ae89cb56619850dc140869139d61a2f4fa2941d2d1878", size = 1111179, upload-time = "2025-07-19T19:24:21.908Z" }, - { url = "https://files.pythonhosted.org/packages/ce/77/9acda68c7cea4d5dd027ef63163e0be30008f635acd75ea801e4c443fcdd/rignore-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8883d079b948ffcd56b67572831c9b8949eca7fe2e8f7bdbf7691c7a9388f054", size = 1121143, upload-time = "2025-07-19T19:24:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/05/67/d1489e9224f33b9a87b7f870650bcab582ee3452df286bcb2fbb6a7ba257/rignore-0.6.4-cp310-cp310-win32.whl", hash = "sha256:5aeac5b354e15eb9f7857b02ad2af12ae2c2ed25a61921b0bd7e272774530f77", size = 643131, upload-time = "2025-07-19T19:24:54.437Z" }, - { url = "https://files.pythonhosted.org/packages/5d/d1/7d668bed51d3f0895e875e57c8e42f421635cdbcb96652ab24f297c9c5cf/rignore-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:90419f881d05a1febb0578a175aa3e51d149ded1875421ed75a8af4392b7fe56", size = 721109, upload-time = "2025-07-19T19:24:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/be/11/66992d271dbc44eac33f3b6b871855bc17e511b9279a2a0982b44c2b0c01/rignore-0.6.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:85f684dfc2c497e35ad34ffd6744a3bcdcac273ec1dbe7d0464bfa20f3331434", size = 888239, upload-time = "2025-07-19T19:23:51.835Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1b/a9bde714e474043f97a06097925cf11e4597f9453adc267427d05ff9f38e/rignore-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23954acc6debc852dbccbffbb70f0e26b12d230239e1ad0638eb5540694d0308", size = 824348, upload-time = "2025-07-19T19:23:45.54Z" }, - { url = "https://files.pythonhosted.org/packages/db/58/dabba227fee6553f9be069f58128419b6d4954c784c4cd566cfe59955c1f/rignore-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2bf793bd58dbf3dee063a758b23ea446b5f037370405ecefc78e1e8923fc658", size = 892419, upload-time = "2025-07-19T19:22:33.763Z" }, - { url = "https://files.pythonhosted.org/packages/2c/fa/e3c16368ee32d6d1146cf219b127fd5c7e6baf22cad7a7a5967782ff3b20/rignore-0.6.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1eaeaa5a904e098604ea2012383a721de06211c8b4013abf0d41c3cfeb982f4f", size = 873285, upload-time = "2025-07-19T19:22:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/78/9d/ef43d760dc3d18011d8482692b478785a846bba64157844b3068e428739c/rignore-0.6.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a48bdbeb03093e3fac2b40d62a718c59b5bb4f29cfdc8e7cbb360e1ea7bf0056", size = 1160457, upload-time = "2025-07-19T19:22:59.457Z" }, - { url = "https://files.pythonhosted.org/packages/95/de/eca1b035705e0b4e6c630fd1fcec45d14cf354a4acea88cf29ea0a322fea/rignore-0.6.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c5f9452d116be405f0967160b449c46ac929b50eaf527f33ee4680e3716e39", size = 938833, upload-time = "2025-07-19T19:23:11.657Z" }, - { url = "https://files.pythonhosted.org/packages/d4/2d/58912efa4137e989616d679a5390b53e93d5150be47217dd686ff60cd4cd/rignore-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf1039bfbdaa0f9710a6fb75436c25ca26d364881ec4d1e66d466bb36a7fb98", size = 950603, upload-time = "2025-07-19T19:23:35.245Z" }, - { url = "https://files.pythonhosted.org/packages/6f/3d/9827cc1c7674d8d884d3d231a224a2db8ea8eae075a1611dfdcd0c301e20/rignore-0.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:136629eb0ec2b6ac6ab34e71ce8065a07106fe615a53eceefc30200d528a4612", size = 976867, upload-time = "2025-07-19T19:23:24.919Z" }, - { url = "https://files.pythonhosted.org/packages/75/47/9dcee35e24897b62d66f7578f127bc91465c942a9d702d516d3fe7dcaa00/rignore-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:35e3d0ebaf01086e6454c3fecae141e2db74a5ddf4a97c72c69428baeff0b7d4", size = 1067603, upload-time = "2025-07-19T19:23:58.765Z" }, - { url = "https://files.pythonhosted.org/packages/4b/68/f66e7c0b0fc009f3e19ba8e6c3078a227285e3aecd9f6498d39df808cdfd/rignore-0.6.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7ed1f9010fa1ef5ea0b69803d1dfb4b7355921779e03a30396034c52691658bc", size = 1136289, upload-time = "2025-07-19T19:24:11.136Z" }, - { url = "https://files.pythonhosted.org/packages/a6/b7/6fff161fe3ae5c0e0a0dded9a428e41d31c7fefc4e57c7553b9ffb064139/rignore-0.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c16e9e898ed0afe2e20fa8d6412e02bd13f039f7e0d964a289368efd4d9ad320", size = 1111566, upload-time = "2025-07-19T19:24:23.065Z" }, - { url = "https://files.pythonhosted.org/packages/1f/c5/a5978ad65074a08dad46233a3333d154ae9cb9339325f3c181002a174746/rignore-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e6bc0bdcd404a7a8268629e8e99967127bb41e02d9eb09a471364c4bc25e215", size = 1121142, upload-time = "2025-07-19T19:24:35.151Z" }, - { url = "https://files.pythonhosted.org/packages/e8/af/91f084374b95dc2477a4bd066957beb3b61b551f2364b4f7f5bc52c9e4c7/rignore-0.6.4-cp311-cp311-win32.whl", hash = "sha256:fdd59bd63d2a49cc6d4f3598f285552ccb1a41e001df1012e0e0345cf2cabf79", size = 643031, upload-time = "2025-07-19T19:24:55.541Z" }, - { url = "https://files.pythonhosted.org/packages/07/3a/31672aa957aebba8903005313697127bbbad9db3afcfc9857150301fab1d/rignore-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:7bf5be0e8a01845e57b5faa47ef9c623bb2070aa2f743c2fc73321ffaae45701", size = 721003, upload-time = "2025-07-19T19:24:48.867Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6c/e5af4383cdd7829ef9aa63ac82a6507983e02dbc7c2e7b9aa64b7b8e2c7a/rignore-0.6.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74720d074b79f32449d5d212ce732e0144a294a184246d1f1e7bcc1fc5c83b69", size = 885885, upload-time = "2025-07-19T19:23:53.236Z" }, - { url = "https://files.pythonhosted.org/packages/89/3e/1b02a868830e464769aa417ee195ac352fe71ff818df8ce50c4b998edb9c/rignore-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a8184fcf567bd6b6d7b85a0c138d98dd40f63054141c96b175844414c5530d7", size = 819736, upload-time = "2025-07-19T19:23:46.565Z" }, - { url = "https://files.pythonhosted.org/packages/e0/75/b9be0c523d97c09f3c6508a67ce376aba4efe41c333c58903a0d7366439a/rignore-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcb0d7d7ecc3fbccf6477bb187c04a091579ea139f15f139abe0b3b48bdfef69", size = 892779, upload-time = "2025-07-19T19:22:35.167Z" }, - { url = "https://files.pythonhosted.org/packages/91/f4/3064b06233697f2993485d132f06fe95061fef71631485da75aed246c4fd/rignore-0.6.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feac73377a156fb77b3df626c76f7e5893d9b4e9e886ac8c0f9d44f1206a2a91", size = 872116, upload-time = "2025-07-19T19:22:47.828Z" }, - { url = "https://files.pythonhosted.org/packages/99/94/cb8e7af9a3c0a665f10e2366144e0ebc66167cf846aca5f1ac31b3661598/rignore-0.6.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:465179bc30beb1f7a3439e428739a2b5777ed26660712b8c4e351b15a7c04483", size = 1163345, upload-time = "2025-07-19T19:23:00.557Z" }, - { url = "https://files.pythonhosted.org/packages/86/6b/49faa7ad85ceb6ccef265df40091d9992232d7f6055fa664fe0a8b13781c/rignore-0.6.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a4877b4dca9cf31a4d09845b300c677c86267657540d0b4d3e6d0ce3110e6e9", size = 939967, upload-time = "2025-07-19T19:23:13.494Z" }, - { url = "https://files.pythonhosted.org/packages/80/c8/b91afda10bd5ca1e3a80463340b899c0dc26a7750a9f3c94f668585c7f40/rignore-0.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456456802b1e77d1e2d149320ee32505b8183e309e228129950b807d204ddd17", size = 949717, upload-time = "2025-07-19T19:23:36.404Z" }, - { url = "https://files.pythonhosted.org/packages/3f/f1/88bfdde58ae3fb1c1a92bb801f492eea8eafcdaf05ab9b75130023a4670b/rignore-0.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c1ff2fc223f1d9473d36923160af37bf765548578eb9d47a2f52e90da8ae408", size = 975534, upload-time = "2025-07-19T19:23:25.988Z" }, - { url = "https://files.pythonhosted.org/packages/aa/8f/a80b4a2e48ceba56ba19e096d41263d844757e10aa36ede212571b5d8117/rignore-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e445fbc214ae18e0e644a78086ea5d0f579e210229a4fbe86367d11a4cd03c11", size = 1067837, upload-time = "2025-07-19T19:23:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/7d/90/0905597af0e78748909ef58418442a480ddd93e9fc89b0ca9ab170c357c0/rignore-0.6.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e07d9c5270fc869bc431aadcfb6ed0447f89b8aafaa666914c077435dc76a123", size = 1134959, upload-time = "2025-07-19T19:24:12.396Z" }, - { url = "https://files.pythonhosted.org/packages/cc/7d/0fa29adf9183b61947ce6dc8a1a9779a8ea16573f557be28ec893f6ddbaa/rignore-0.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a6ccc0ea83d2c0c6df6b166f2acacedcc220a516436490f41e99a5ae73b6019", size = 1109708, upload-time = "2025-07-19T19:24:24.176Z" }, - { url = "https://files.pythonhosted.org/packages/4e/a7/92892ed86b2e36da403dd3a0187829f2d880414cef75bd612bfdf4dedebc/rignore-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:536392c5ec91755db48389546c833c4ab1426fe03e5a8522992b54ef8a244e7e", size = 1120546, upload-time = "2025-07-19T19:24:36.377Z" }, - { url = "https://files.pythonhosted.org/packages/31/1b/d29ae1fe901d523741d6d1d3ffe0d630734dd0ed6b047628a69c1e15ea44/rignore-0.6.4-cp312-cp312-win32.whl", hash = "sha256:f5f9dca46fc41c0a1e236767f68be9d63bdd2726db13a0ae3a30f68414472969", size = 642005, upload-time = "2025-07-19T19:24:56.671Z" }, - { url = "https://files.pythonhosted.org/packages/1a/41/a224944824688995374e4525115ce85fecd82442fc85edd5bcd81f4f256d/rignore-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:e02eecb9e1b9f9bf7c9030ae73308a777bed3b2486204cc74dfcfbe699ab1497", size = 720358, upload-time = "2025-07-19T19:24:49.959Z" }, - { url = "https://files.pythonhosted.org/packages/db/a3/edd7d0d5cc0720de132b6651cef95ee080ce5fca11c77d8a47db848e5f90/rignore-0.6.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2b3b1e266ce45189240d14dfa1057f8013ea34b9bc8b3b44125ec8d25fdb3985", size = 885304, upload-time = "2025-07-19T19:23:54.268Z" }, - { url = "https://files.pythonhosted.org/packages/93/a1/d8d2fb97a6548307507d049b7e93885d4a0dfa1c907af5983fd9f9362a21/rignore-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45fe803628cc14714df10e8d6cdc23950a47eb9eb37dfea9a4779f4c672d2aa0", size = 818799, upload-time = "2025-07-19T19:23:47.544Z" }, - { url = "https://files.pythonhosted.org/packages/b1/cd/949981fcc180ad5ba7b31c52e78b74b2dea6b7bf744ad4c0c4b212f6da78/rignore-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e439f034277a947a4126e2da79dbb43e33d73d7c09d3d72a927e02f8a16f59aa", size = 892024, upload-time = "2025-07-19T19:22:36.18Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d3/9042d701a8062d9c88f87760bbc2695ee2c23b3f002d34486b72a85f8efe/rignore-0.6.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b5121650ae24621154c7bdba8b8970b0739d8146505c9f38e0cda9385d1004", size = 871430, upload-time = "2025-07-19T19:22:49.62Z" }, - { url = "https://files.pythonhosted.org/packages/eb/50/3370249b984212b7355f3d9241aa6d02e706067c6d194a2614dfbc0f5b27/rignore-0.6.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52b0957b585ab48a445cf8ac1dbc33a272ab060835e583b4f95aa8c67c23fb2b", size = 1160559, upload-time = "2025-07-19T19:23:01.629Z" }, - { url = "https://files.pythonhosted.org/packages/6c/6f/2ad7f925838091d065524f30a8abda846d1813eee93328febf262b5cda21/rignore-0.6.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50359e0d5287b5e2743bd2f2fbf05df619c8282fd3af12f6628ff97b9675551d", size = 939947, upload-time = "2025-07-19T19:23:14.608Z" }, - { url = "https://files.pythonhosted.org/packages/1f/01/626ec94d62475ae7ef8b00ef98cea61cbea52a389a666703c97c4673d406/rignore-0.6.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe18096dcb1596757dfe0b412aab6d32564473ae7ee58dea0a8b4be5b1a2e3b", size = 949471, upload-time = "2025-07-19T19:23:37.521Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c3/699c4f03b3c46f4b5c02f17a0a339225da65aad547daa5b03001e7c6a382/rignore-0.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b79c212d9990a273ad91e8d9765e1766ef6ecedd3be65375d786a252762ba385", size = 974912, upload-time = "2025-07-19T19:23:27.13Z" }, - { url = "https://files.pythonhosted.org/packages/cd/35/04626c12f9f92a9fc789afc2be32838a5d9b23b6fa8b2ad4a8625638d15b/rignore-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6ffa7f2a8894c65aa5dc4e8ac8bbdf39a326c0c6589efd27686cfbb48f0197d", size = 1067281, upload-time = "2025-07-19T19:24:01.016Z" }, - { url = "https://files.pythonhosted.org/packages/fe/9c/8f17baf3b984afea151cb9094716f6f1fb8e8737db97fc6eb6d494bd0780/rignore-0.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a63f5720dffc8d8fb0a4d02fafb8370a4031ebf3f99a4e79f334a91e905b7349", size = 1134414, upload-time = "2025-07-19T19:24:13.534Z" }, - { url = "https://files.pythonhosted.org/packages/10/88/ef84ffa916a96437c12cefcc39d474122da9626d75e3a2ebe09ec5d32f1b/rignore-0.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ce33982da47ac5dc09d19b04fa8d7c9aa6292fc0bd1ecf33076989faa8886094", size = 1109330, upload-time = "2025-07-19T19:24:25.303Z" }, - { url = "https://files.pythonhosted.org/packages/27/43/2ada5a2ec03b82e903610a1c483f516f78e47700ee6db9823f739e08b3af/rignore-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d899621867aa266824fbd9150e298f19d25b93903ef0133c09f70c65a3416eca", size = 1120381, upload-time = "2025-07-19T19:24:37.798Z" }, - { url = "https://files.pythonhosted.org/packages/3b/99/e7bcc643085131cb14dbea772def72bf1f6fe9037171ebe177c4f228abc8/rignore-0.6.4-cp313-cp313-win32.whl", hash = "sha256:d0615a6bf4890ec5a90b5fb83666822088fbd4e8fcd740c386fcce51e2f6feea", size = 641761, upload-time = "2025-07-19T19:24:58.096Z" }, - { url = "https://files.pythonhosted.org/packages/d9/25/7798908044f27dea1a8abdc75c14523e33770137651e5f775a15143f4218/rignore-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:145177f0e32716dc2f220b07b3cde2385b994b7ea28d5c96fbec32639e9eac6f", size = 719876, upload-time = "2025-07-19T19:24:51.125Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e3/ae1e30b045bf004ad77bbd1679b9afff2be8edb166520921c6f29420516a/rignore-0.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e55bf8f9bbd186f58ab646b4a08718c77131d28a9004e477612b0cbbd5202db2", size = 891776, upload-time = "2025-07-19T19:22:37.78Z" }, - { url = "https://files.pythonhosted.org/packages/45/a9/1193e3bc23ca0e6eb4f17cf4b99971237f97cfa6f241d98366dff90a6d09/rignore-0.6.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2521f7bf3ee1f2ab22a100a3a4eed39a97b025804e5afe4323528e9ce8f084a5", size = 871442, upload-time = "2025-07-19T19:22:50.972Z" }, - { url = "https://files.pythonhosted.org/packages/20/83/4c52ae429a0b2e1ce667e35b480e9a6846f9468c443baeaed5d775af9485/rignore-0.6.4-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cc35773a8a9c119359ef974d0856988d4601d4daa6f532c05f66b4587cf35bc", size = 1159844, upload-time = "2025-07-19T19:23:02.751Z" }, - { url = "https://files.pythonhosted.org/packages/c1/2f/c740f5751f464c937bfe252dc15a024ae081352cfe80d94aa16d6a617482/rignore-0.6.4-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b665b1ea14457d7b49e834baabc635a3b8c10cfb5cca5c21161fabdbfc2b850e", size = 939456, upload-time = "2025-07-19T19:23:15.72Z" }, - { url = "https://files.pythonhosted.org/packages/fc/dd/68dbb08ac0edabf44dd144ff546a3fb0253c5af708e066847df39fc9188f/rignore-0.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c7fd339f344a8548724f289495b835bed7b81174a0bc1c28c6497854bd8855db", size = 1067070, upload-time = "2025-07-19T19:24:02.803Z" }, - { url = "https://files.pythonhosted.org/packages/3b/3a/7e7ea6f0d31d3f5beb0f2cf2c4c362672f5f7f125714458673fc579e2bed/rignore-0.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:91dc94b1cc5af8d6d25ce6edd29e7351830f19b0a03b75cb3adf1f76d00f3007", size = 1134598, upload-time = "2025-07-19T19:24:15.039Z" }, - { url = "https://files.pythonhosted.org/packages/7e/06/1b3307f6437d29bede5a95738aa89e6d910ba68d4054175c9f60d8e2c6b1/rignore-0.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4d1918221a249e5342b60fd5fa513bf3d6bf272a8738e66023799f0c82ecd788", size = 1108862, upload-time = "2025-07-19T19:24:26.765Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d5/b37c82519f335f2c472a63fc6215c6f4c51063ecf3166e3acf508011afbd/rignore-0.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:240777332b859dc89dcba59ab6e3f1e062bc8e862ffa3e5f456e93f7fd5cb415", size = 1120002, upload-time = "2025-07-19T19:24:38.952Z" }, - { url = "https://files.pythonhosted.org/packages/ac/72/2f05559ed5e69bdfdb56ea3982b48e6c0017c59f7241f7e1c5cae992b347/rignore-0.6.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b0e548753e55cc648f1e7b02d9f74285fe48bb49cec93643d31e563773ab3f", size = 949454, upload-time = "2025-07-19T19:23:38.664Z" }, - { url = "https://files.pythonhosted.org/packages/0b/92/186693c8f838d670510ac1dfb35afbe964320fbffb343ba18f3d24441941/rignore-0.6.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6971ac9fdd5a0bd299a181096f091c4f3fd286643adceba98eccc03c688a6637", size = 974663, upload-time = "2025-07-19T19:23:28.24Z" }, - { url = "https://files.pythonhosted.org/packages/85/4d/5a69ea5ae7de78eddf0a0699b6dbd855f87c1436673425461188ea39662f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40f493eef4b191777ba6d16879e3f73836142e04480d2e2f483675d652e6b559", size = 895408, upload-time = "2025-07-19T19:22:42.16Z" }, - { url = "https://files.pythonhosted.org/packages/a3/c3/b6cdf9b676d6774c5de3ca04a5f4dbaffae3bb06bdee395e095be24f098e/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6790635e4df35333e27cd9e8b31d1d559826cf8b52f2c374b81ab698ac0140cf", size = 873042, upload-time = "2025-07-19T19:22:54.663Z" }, - { url = "https://files.pythonhosted.org/packages/80/25/61182149b2f2ca86c22c6253b361ec0e983e60e913ca75588a7d559b41eb/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e326dab28787f07c6987c04686d4ad9d4b1e1caca1a15b85d443f91af2e133d2", size = 1162036, upload-time = "2025-07-19T19:23:06.916Z" }, - { url = "https://files.pythonhosted.org/packages/db/44/7fe55c2b7adc8c90dc8709ef2fac25fa526b0c8bfd1090af4e6b33c2e42f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd24cb0f58c6036b0f64ac6fc3f759b7f0de5506fa9f5a65e9d57f8cf44a026d", size = 940381, upload-time = "2025-07-19T19:23:19.364Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a3/8cc0c9a9db980a1589007d0fedcaf41475820e0cd4950a5f6eeb8ebc0ee0/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36cb95b0acae3c88b99a39f4246b395fd983848f3ec85ff26531d638b6584a45", size = 951924, upload-time = "2025-07-19T19:23:42.209Z" }, - { url = "https://files.pythonhosted.org/packages/07/f2/4f2c88307c84801d6c772c01e8d856deaa8e85117180b88aaa0f41d4f86f/rignore-0.6.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dfc954973429ce545d06163d87a6bae0ccea5703adbc957ee3d332c9592a58eb", size = 976515, upload-time = "2025-07-19T19:23:31.524Z" }, - { url = "https://files.pythonhosted.org/packages/a4/bd/f701ddf897cf5e3f394107e6dad147216b3a0d84e9d53d7a5fed7cc97d26/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:cbed37d7c128b58ab9ade80e131efc4a48b6d045cd0bd1d3254cbb6b4a0ad67e", size = 1069896, upload-time = "2025-07-19T19:24:06.24Z" }, - { url = "https://files.pythonhosted.org/packages/00/52/1ae54afad26aafcfee1b44a36b27bb0dd63f1c23081e1599dbf681368925/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a0db910ef867d6ca2d52fefd22d8b6b63b20ec61661e2ad57e5c425a4e39431a", size = 1136337, upload-time = "2025-07-19T19:24:18.529Z" }, - { url = "https://files.pythonhosted.org/packages/85/9a/3b74aabb69ed118d0b493afa62d1aacc3bf12b8f11bf682a3c02174c3068/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d664443a0a71d0a7d669adf32be59c4249bbff8b2810960f1b91d413ee4cf6b8", size = 1111677, upload-time = "2025-07-19T19:24:30.21Z" }, - { url = "https://files.pythonhosted.org/packages/70/7d/bd0f6c1bc89c80b116b526b77cdd5263c0ad218d5416aebf4ca9cce9ca73/rignore-0.6.4-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:b9f6f1d91429b4a6772152848815cf1459663796b7b899a0e15d9198e32c9371", size = 1122823, upload-time = "2025-07-19T19:24:42.476Z" }, - { url = "https://files.pythonhosted.org/packages/33/a1/daaa2df10dfa6d87c896a5783c8407c284530d5a056307d1f55a8ef0c533/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b3da26d5a35ab15525b68d30b7352ad2247321f5201fc7e50ba6d547f78d5ea", size = 895772, upload-time = "2025-07-19T19:22:43.423Z" }, - { url = "https://files.pythonhosted.org/packages/35/e6/65130a50cd3ed11c967034dfd653e160abb7879fb4ee338a1cccaeda7acd/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43028f3587558231d9fa68accff58c901dc50fd7bbc5764d3ee3df95290f6ebf", size = 873093, upload-time = "2025-07-19T19:22:55.745Z" }, - { url = "https://files.pythonhosted.org/packages/32/c4/02ead1274ce935c59f2bb3deaaaa339df9194bc40e3c2d8d623e31e47ec4/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc56f1fcab7740751b98fead67b98ba64896424d8c834ea22089568db4e36dfa", size = 1162199, upload-time = "2025-07-19T19:23:08.376Z" }, - { url = "https://files.pythonhosted.org/packages/78/0c/94a4edce0e80af69f200cc35d8da4c727c52d28f0c9d819b388849ae8ef6/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6033f2280898535a5f69935e08830a4e49ff1e29ef2c3f9a2b9ced59de06fdbf", size = 940176, upload-time = "2025-07-19T19:23:20.862Z" }, - { url = "https://files.pythonhosted.org/packages/43/92/21ec579c999a3ed4d1b2a5926a9d0edced7c65d8ac353bc9120d49b05a64/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f5ac0c4e6a24be88f3821e101ef4665e9e1dc015f9e45109f32fed71dbcdafa", size = 951632, upload-time = "2025-07-19T19:23:43.32Z" }, - { url = "https://files.pythonhosted.org/packages/67/c4/72e7ba244222b9efdeb18f9974d6f1e30cf5a2289e1b482a1e8b3ebee90f/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8906ac8dd585ece83b1346e0470260a1951058cc0ef5a17542069bde4aa3f42f", size = 976923, upload-time = "2025-07-19T19:23:32.678Z" }, - { url = "https://files.pythonhosted.org/packages/8e/14/e754c12bc953c7fa309687cd30a6ea95e5721168fb0b2a99a34bff24be5c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:14d095622969504a2e56f666286202dad583f08d3347b7be2d647ddfd7a9bf47", size = 1069861, upload-time = "2025-07-19T19:24:07.671Z" }, - { url = "https://files.pythonhosted.org/packages/a6/24/ba2bdaf04a19b5331c051b9d480e8daca832bed4aeaa156d6d679044c06c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:30f3d688df7eb4850318f1b5864d14f2c5fe5dbf3803ed0fc8329d2a7ad560dc", size = 1136368, upload-time = "2025-07-19T19:24:19.68Z" }, - { url = "https://files.pythonhosted.org/packages/83/48/7cf52353299e02aa629150007fa75f4b91d99b4f2fa536f2e24ead810116/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:028f62a7b0a6235bb3f03c9e7f342352e7fa4b3f08c761c72f9de8faee40ed9c", size = 1111714, upload-time = "2025-07-19T19:24:31.717Z" }, - { url = "https://files.pythonhosted.org/packages/84/9c/3881ad34f01942af0cf713e25e476bf851e04e389cc3ff146c3b459ab861/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:7e6c425603db2c147eace4f752ca3cd4551e7568c9d332175d586c68bcbe3d8d", size = 1122433, upload-time = "2025-07-19T19:24:43.973Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, ] [[package]] name = "roman" version = "5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/86/8bdb59db4b7ea9a2bd93f8d25298981e09a4c9f4744cf4cbafa7ef6fee7b/roman-5.1.tar.gz", hash = "sha256:3a86572e9bc9183e771769601189e5fa32f1620ffeceebb9eca836affb409986", size = 8066, upload-time = "2025-07-18T05:25:12.753Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/86/8bdb59db4b7ea9a2bd93f8d25298981e09a4c9f4744cf4cbafa7ef6fee7b/roman-5.1.tar.gz", hash = "sha256:3a86572e9bc9183e771769601189e5fa32f1620ffeceebb9eca836affb409986", size = 8066 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/d0/27c9840ddaf331ace898c7f4aa1e1304a7acc22b844b5420fabb6d14c3a0/roman-5.1-py3-none-any.whl", hash = "sha256:bf595d8a9bc4a8e8b1dfa23e1d4def0251b03b494786df6b8c3d3f1635ce285a", size = 5825, upload-time = "2025-07-18T05:25:11.496Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/27c9840ddaf331ace898c7f4aa1e1304a7acc22b844b5420fabb6d14c3a0/roman-5.1-py3-none-any.whl", hash = "sha256:bf595d8a9bc4a8e8b1dfa23e1d4def0251b03b494786df6b8c3d3f1635ce285a", size = 5825 }, ] [[package]] name = "roman-numerals-py" version = "3.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017 } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" }, -] - -[[package]] -name = "sentry-sdk" -version = "2.34.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/38/10d6bfe23df1bfc65ac2262ed10b45823f47f810b0057d3feeea1ca5c7ed/sentry_sdk-2.34.1.tar.gz", hash = "sha256:69274eb8c5c38562a544c3e9f68b5be0a43be4b697f5fd385bf98e4fbe672687", size = 336969, upload-time = "2025-07-30T11:13:37.93Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/3e/bb34de65a5787f76848a533afbb6610e01fbcdd59e76d8679c254e02255c/sentry_sdk-2.34.1-py2.py3-none-any.whl", hash = "sha256:b7a072e1cdc5abc48101d5146e1ae680fa81fe886d8d95aaa25a0b450c818d32", size = 357743, upload-time = "2025-07-30T11:13:36.145Z" }, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, + { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] name = "snowballstemmer" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, ] [[package]] name = "soupsieve" version = "2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, ] [[package]] @@ -1628,9 +1265,9 @@ dependencies = [ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, ] [[package]] @@ -1660,9 +1297,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876 } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, + { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741 }, ] [[package]] @@ -1675,9 +1312,9 @@ resolution-markers = [ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/26/f0/43c6a5ff3e7b08a8c3b32f81b859f1b518ccc31e45f22e2b41ced38be7b9/sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55", size = 36282, upload-time = "2025-01-16T18:25:30.958Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/f0/43c6a5ff3e7b08a8c3b32f81b859f1b518ccc31e45f22e2b41ced38be7b9/sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55", size = 36282 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/dc/dc46c5c7c566b7ec5e8f860f9c89533bf03c0e6aadc96fb9b337867e4460/sphinx_autodoc_typehints-3.0.1-py3-none-any.whl", hash = "sha256:4b64b676a14b5b79cefb6628a6dc8070e320d4963e8ff640a2f3e9390ae9045a", size = 20245, upload-time = "2025-01-16T18:25:27.394Z" }, + { url = "https://files.pythonhosted.org/packages/3c/dc/dc46c5c7c566b7ec5e8f860f9c89533bf03c0e6aadc96fb9b337867e4460/sphinx_autodoc_typehints-3.0.1-py3-none-any.whl", hash = "sha256:4b64b676a14b5b79cefb6628a6dc8070e320d4963e8ff640a2f3e9390ae9045a", size = 20245 }, ] [[package]] @@ -1691,9 +1328,9 @@ resolution-markers = [ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/68/a388a9b8f066cd865d9daa65af589d097efbfab9a8c302d2cb2daa43b52e/sphinx_autodoc_typehints-3.2.0.tar.gz", hash = "sha256:107ac98bc8b4837202c88c0736d59d6da44076e65a0d7d7d543a78631f662a9b", size = 36724, upload-time = "2025-04-25T16:53:25.872Z" } +sdist = { url = "https://files.pythonhosted.org/packages/93/68/a388a9b8f066cd865d9daa65af589d097efbfab9a8c302d2cb2daa43b52e/sphinx_autodoc_typehints-3.2.0.tar.gz", hash = "sha256:107ac98bc8b4837202c88c0736d59d6da44076e65a0d7d7d543a78631f662a9b", size = 36724 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/c7/8aab362e86cbf887e58be749a78d20ad743e1eb2c73c2b13d4761f39a104/sphinx_autodoc_typehints-3.2.0-py3-none-any.whl", hash = "sha256:884b39be23b1d884dcc825d4680c9c6357a476936e3b381a67ae80091984eb49", size = 20563, upload-time = "2025-04-25T16:53:24.492Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c7/8aab362e86cbf887e58be749a78d20ad743e1eb2c73c2b13d4761f39a104/sphinx_autodoc_typehints-3.2.0-py3-none-any.whl", hash = "sha256:884b39be23b1d884dcc825d4680c9c6357a476936e3b381a67ae80091984eb49", size = 20563 }, ] [[package]] @@ -1705,115 +1342,102 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/19/d002ed96bdc7738c15847c730e1e88282d738263deac705d5713b4d8fa94/sphinx_book_theme-1.1.4.tar.gz", hash = "sha256:73efe28af871d0a89bd05856d300e61edce0d5b2fbb7984e84454be0fedfe9ed", size = 439188, upload-time = "2025-02-20T16:32:32.581Z" } +sdist = { url = "https://files.pythonhosted.org/packages/45/19/d002ed96bdc7738c15847c730e1e88282d738263deac705d5713b4d8fa94/sphinx_book_theme-1.1.4.tar.gz", hash = "sha256:73efe28af871d0a89bd05856d300e61edce0d5b2fbb7984e84454be0fedfe9ed", size = 439188 } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/9e/c41d68be04eef5b6202b468e0f90faf0c469f3a03353f2a218fd78279710/sphinx_book_theme-1.1.4-py3-none-any.whl", hash = "sha256:843b3f5c8684640f4a2d01abd298beb66452d1b2394cd9ef5be5ebd5640ea0e1", size = 433952, upload-time = "2025-02-20T16:32:31.009Z" }, + { url = "https://files.pythonhosted.org/packages/51/9e/c41d68be04eef5b6202b468e0f90faf0c469f3a03353f2a218fd78279710/sphinx_book_theme-1.1.4-py3-none-any.whl", hash = "sha256:843b3f5c8684640f4a2d01abd298beb66452d1b2394cd9ef5be5ebd5640ea0e1", size = 433952 }, ] [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, ] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, ] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, ] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, ] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, ] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, -] - -[[package]] -name = "starlette" -version = "0.47.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" }, + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, ] [[package]] name = "tomli" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] [[package]] @@ -1823,33 +1447,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/68/71c1a15b5f65f40e91b65da23b8224dad41349894535a97f63a52e462196/typeguard-4.4.4.tar.gz", hash = "sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74", size = 75203, upload-time = "2025-06-18T09:56:07.624Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/68/71c1a15b5f65f40e91b65da23b8224dad41349894535a97f63a52e462196/typeguard-4.4.4.tar.gz", hash = "sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74", size = 75203 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl", hash = "sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e", size = 34874, upload-time = "2025-06-18T09:56:05.999Z" }, -] - -[[package]] -name = "typer" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "rich" }, - { name = "shellingham" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload-time = "2025-05-26T14:30:31.824Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a9/e3aee762739c1d7528da1c3e06d518503f8b6c439c35549b53735ba52ead/typeguard-4.4.4-py3-none-any.whl", hash = "sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e", size = 34874 }, ] [[package]] name = "typing-extensions" version = "4.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423, upload-time = "2025-06-02T14:52:11.399Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" }, + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, ] [[package]] @@ -1860,9 +1469,9 @@ dependencies = [ { name = "mypy-extensions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825 } wheels = [ - { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 }, ] [[package]] @@ -1872,93 +1481,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, ] [[package]] name = "uc-micro-py" version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043, upload-time = "2024-02-09T16:52:01.654Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043 } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229, upload-time = "2024-02-09T16:52:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229 }, ] [[package]] name = "urllib3" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672, upload-time = "2025-04-10T15:23:39.232Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680, upload-time = "2025-04-10T15:23:37.377Z" }, -] - -[[package]] -name = "uvicorn" -version = "0.35.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "httptools" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, - { name = "watchfiles" }, - { name = "websockets" }, -] - -[[package]] -name = "uvloop" -version = "0.21.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/76/44a55515e8c9505aa1420aebacf4dd82552e5e15691654894e90d0bd051a/uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f", size = 1442019, upload-time = "2024-10-14T23:37:20.068Z" }, - { url = "https://files.pythonhosted.org/packages/35/5a/62d5800358a78cc25c8a6c72ef8b10851bdb8cca22e14d9c74167b7f86da/uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d", size = 801898, upload-time = "2024-10-14T23:37:22.663Z" }, - { url = "https://files.pythonhosted.org/packages/f3/96/63695e0ebd7da6c741ccd4489b5947394435e198a1382349c17b1146bb97/uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26", size = 3827735, upload-time = "2024-10-14T23:37:25.129Z" }, - { url = "https://files.pythonhosted.org/packages/61/e0/f0f8ec84979068ffae132c58c79af1de9cceeb664076beea86d941af1a30/uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb", size = 3825126, upload-time = "2024-10-14T23:37:27.59Z" }, - { url = "https://files.pythonhosted.org/packages/bf/fe/5e94a977d058a54a19df95f12f7161ab6e323ad49f4dabc28822eb2df7ea/uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f", size = 3705789, upload-time = "2024-10-14T23:37:29.385Z" }, - { url = "https://files.pythonhosted.org/packages/26/dd/c7179618e46092a77e036650c1f056041a028a35c4d76945089fcfc38af8/uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c", size = 3800523, upload-time = "2024-10-14T23:37:32.048Z" }, - { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" }, - { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" }, - { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" }, - { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" }, - { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" }, - { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" }, - { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123, upload-time = "2024-10-14T23:38:00.688Z" }, - { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325, upload-time = "2024-10-14T23:38:02.309Z" }, - { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806, upload-time = "2024-10-14T23:38:04.711Z" }, - { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068, upload-time = "2024-10-14T23:38:06.385Z" }, - { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428, upload-time = "2024-10-14T23:38:08.416Z" }, - { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018, upload-time = "2024-10-14T23:38:10.888Z" }, + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, ] [[package]] @@ -1970,239 +1522,80 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload-time = "2025-05-08T17:58:23.811Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload-time = "2025-05-08T17:58:21.15Z" }, -] - -[[package]] -name = "watchfiles" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/dd/579d1dc57f0f895426a1211c4ef3b0cb37eb9e642bb04bdcd962b5df206a/watchfiles-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:27f30e14aa1c1e91cb653f03a63445739919aef84c8d2517997a83155e7a2fcc", size = 405757, upload-time = "2025-06-15T19:04:51.058Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/7a0318cd874393344d48c34d53b3dd419466adf59a29ba5b51c88dd18b86/watchfiles-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3366f56c272232860ab45c77c3ca7b74ee819c8e1f6f35a7125556b198bbc6df", size = 397511, upload-time = "2025-06-15T19:04:52.79Z" }, - { url = "https://files.pythonhosted.org/packages/06/be/503514656d0555ec2195f60d810eca29b938772e9bfb112d5cd5ad6f6a9e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8412eacef34cae2836d891836a7fff7b754d6bcac61f6c12ba5ca9bc7e427b68", size = 450739, upload-time = "2025-06-15T19:04:54.203Z" }, - { url = "https://files.pythonhosted.org/packages/4e/0d/a05dd9e5f136cdc29751816d0890d084ab99f8c17b86f25697288ca09bc7/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df670918eb7dd719642e05979fc84704af913d563fd17ed636f7c4783003fdcc", size = 458106, upload-time = "2025-06-15T19:04:55.607Z" }, - { url = "https://files.pythonhosted.org/packages/f1/fa/9cd16e4dfdb831072b7ac39e7bea986e52128526251038eb481effe9f48e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7642b9bc4827b5518ebdb3b82698ada8c14c7661ddec5fe719f3e56ccd13c97", size = 484264, upload-time = "2025-06-15T19:04:57.009Z" }, - { url = "https://files.pythonhosted.org/packages/32/04/1da8a637c7e2b70e750a0308e9c8e662ada0cca46211fa9ef24a23937e0b/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199207b2d3eeaeb80ef4411875a6243d9ad8bc35b07fc42daa6b801cc39cc41c", size = 597612, upload-time = "2025-06-15T19:04:58.409Z" }, - { url = "https://files.pythonhosted.org/packages/30/01/109f2762e968d3e58c95731a206e5d7d2a7abaed4299dd8a94597250153c/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a479466da6db5c1e8754caee6c262cd373e6e6c363172d74394f4bff3d84d7b5", size = 477242, upload-time = "2025-06-15T19:04:59.786Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b8/46f58cf4969d3b7bc3ca35a98e739fa4085b0657a1540ccc29a1a0bc016f/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935f9edd022ec13e447e5723a7d14456c8af254544cefbc533f6dd276c9aa0d9", size = 453148, upload-time = "2025-06-15T19:05:01.103Z" }, - { url = "https://files.pythonhosted.org/packages/a5/cd/8267594263b1770f1eb76914940d7b2d03ee55eca212302329608208e061/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8076a5769d6bdf5f673a19d51da05fc79e2bbf25e9fe755c47595785c06a8c72", size = 626574, upload-time = "2025-06-15T19:05:02.582Z" }, - { url = "https://files.pythonhosted.org/packages/a1/2f/7f2722e85899bed337cba715723e19185e288ef361360718973f891805be/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86b1e28d4c37e89220e924305cd9f82866bb0ace666943a6e4196c5df4d58dcc", size = 624378, upload-time = "2025-06-15T19:05:03.719Z" }, - { url = "https://files.pythonhosted.org/packages/bf/20/64c88ec43d90a568234d021ab4b2a6f42a5230d772b987c3f9c00cc27b8b/watchfiles-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d1caf40c1c657b27858f9774d5c0e232089bca9cb8ee17ce7478c6e9264d2587", size = 279829, upload-time = "2025-06-15T19:05:04.822Z" }, - { url = "https://files.pythonhosted.org/packages/39/5c/a9c1ed33de7af80935e4eac09570de679c6e21c07070aa99f74b4431f4d6/watchfiles-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a89c75a5b9bc329131115a409d0acc16e8da8dfd5867ba59f1dd66ae7ea8fa82", size = 292192, upload-time = "2025-06-15T19:05:06.348Z" }, - { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, - { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, - { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, - { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, - { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, - { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, - { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, - { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, - { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, - { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, - { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, - { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, - { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, - { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, - { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, - { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, - { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, - { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" }, - { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" }, - { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" }, - { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" }, - { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" }, - { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" }, - { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" }, - { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" }, - { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" }, - { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" }, - { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" }, - { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" }, - { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" }, - { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" }, - { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" }, - { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" }, - { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" }, - { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" }, - { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" }, - { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" }, - { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" }, - { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" }, - { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" }, - { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" }, - { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" }, - { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" }, - { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" }, - { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" }, - { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" }, - { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" }, - { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" }, - { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" }, - { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" }, - { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" }, - { url = "https://files.pythonhosted.org/packages/be/7c/a3d7c55cfa377c2f62c4ae3c6502b997186bc5e38156bafcb9b653de9a6d/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a6fd40bbb50d24976eb275ccb55cd1951dfb63dbc27cae3066a6ca5f4beabd5", size = 406748, upload-time = "2025-06-15T19:06:44.2Z" }, - { url = "https://files.pythonhosted.org/packages/38/d0/c46f1b2c0ca47f3667b144de6f0515f6d1c670d72f2ca29861cac78abaa1/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f811079d2f9795b5d48b55a37aa7773680a5659afe34b54cc1d86590a51507d", size = 398801, upload-time = "2025-06-15T19:06:45.774Z" }, - { url = "https://files.pythonhosted.org/packages/70/9c/9a6a42e97f92eeed77c3485a43ea96723900aefa3ac739a8c73f4bff2cd7/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2726d7bfd9f76158c84c10a409b77a320426540df8c35be172444394b17f7ea", size = 451528, upload-time = "2025-06-15T19:06:46.791Z" }, - { url = "https://files.pythonhosted.org/packages/51/7b/98c7f4f7ce7ff03023cf971cd84a3ee3b790021ae7584ffffa0eb2554b96/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df32d59cb9780f66d165a9a7a26f19df2c7d24e3bd58713108b41d0ff4f929c6", size = 454095, upload-time = "2025-06-15T19:06:48.211Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, - { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, -] - -[[package]] -name = "websockets" -version = "15.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, - { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, - { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, - { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, - { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, - { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, - { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, - { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, - { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, - { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, - { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, - { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, - { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, - { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, - { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, - { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, - { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, - { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, - { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, - { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, - { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, - { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, - { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, - { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, - { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, - { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, - { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, - { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, - { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, - { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, - { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, - { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, - { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982 }, ] [[package]] name = "win32-setctime" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, ] [[package]] name = "wrapt" version = "1.17.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531, upload-time = "2025-01-14T10:35:45.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307, upload-time = "2025-01-14T10:33:13.616Z" }, - { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486, upload-time = "2025-01-14T10:33:15.947Z" }, - { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777, upload-time = "2025-01-14T10:33:17.462Z" }, - { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314, upload-time = "2025-01-14T10:33:21.282Z" }, - { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947, upload-time = "2025-01-14T10:33:24.414Z" }, - { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778, upload-time = "2025-01-14T10:33:26.152Z" }, - { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716, upload-time = "2025-01-14T10:33:27.372Z" }, - { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548, upload-time = "2025-01-14T10:33:28.52Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334, upload-time = "2025-01-14T10:33:29.643Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427, upload-time = "2025-01-14T10:33:30.832Z" }, - { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774, upload-time = "2025-01-14T10:33:32.897Z" }, - { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308, upload-time = "2025-01-14T10:33:33.992Z" }, - { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488, upload-time = "2025-01-14T10:33:35.264Z" }, - { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776, upload-time = "2025-01-14T10:33:38.28Z" }, - { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776, upload-time = "2025-01-14T10:33:40.678Z" }, - { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420, upload-time = "2025-01-14T10:33:41.868Z" }, - { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199, upload-time = "2025-01-14T10:33:43.598Z" }, - { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307, upload-time = "2025-01-14T10:33:48.499Z" }, - { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025, upload-time = "2025-01-14T10:33:51.191Z" }, - { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879, upload-time = "2025-01-14T10:33:52.328Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419, upload-time = "2025-01-14T10:33:53.551Z" }, - { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773, upload-time = "2025-01-14T10:33:56.323Z" }, - { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799, upload-time = "2025-01-14T10:33:57.4Z" }, - { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821, upload-time = "2025-01-14T10:33:59.334Z" }, - { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919, upload-time = "2025-01-14T10:34:04.093Z" }, - { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721, upload-time = "2025-01-14T10:34:07.163Z" }, - { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899, upload-time = "2025-01-14T10:34:09.82Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222, upload-time = "2025-01-14T10:34:11.258Z" }, - { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707, upload-time = "2025-01-14T10:34:12.49Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685, upload-time = "2025-01-14T10:34:15.043Z" }, - { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567, upload-time = "2025-01-14T10:34:16.563Z" }, - { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672, upload-time = "2025-01-14T10:34:17.727Z" }, - { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865, upload-time = "2025-01-14T10:34:19.577Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800, upload-time = "2025-01-14T10:34:21.571Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824, upload-time = "2025-01-14T10:34:22.999Z" }, - { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920, upload-time = "2025-01-14T10:34:25.386Z" }, - { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690, upload-time = "2025-01-14T10:34:28.058Z" }, - { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861, upload-time = "2025-01-14T10:34:29.167Z" }, - { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174, upload-time = "2025-01-14T10:34:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721, upload-time = "2025-01-14T10:34:32.91Z" }, - { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763, upload-time = "2025-01-14T10:34:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585, upload-time = "2025-01-14T10:34:36.13Z" }, - { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676, upload-time = "2025-01-14T10:34:37.962Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871, upload-time = "2025-01-14T10:34:39.13Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312, upload-time = "2025-01-14T10:34:40.604Z" }, - { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062, upload-time = "2025-01-14T10:34:45.011Z" }, - { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155, upload-time = "2025-01-14T10:34:47.25Z" }, - { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471, upload-time = "2025-01-14T10:34:50.934Z" }, - { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208, upload-time = "2025-01-14T10:34:52.297Z" }, - { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339, upload-time = "2025-01-14T10:34:53.489Z" }, - { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232, upload-time = "2025-01-14T10:34:55.327Z" }, - { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476, upload-time = "2025-01-14T10:34:58.055Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377, upload-time = "2025-01-14T10:34:59.3Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986, upload-time = "2025-01-14T10:35:00.498Z" }, - { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750, upload-time = "2025-01-14T10:35:03.378Z" }, - { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594, upload-time = "2025-01-14T10:35:44.018Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307 }, + { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486 }, + { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777 }, + { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314 }, + { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947 }, + { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778 }, + { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716 }, + { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334 }, + { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427 }, + { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774 }, + { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308 }, + { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488 }, + { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776 }, + { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776 }, + { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420 }, + { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199 }, + { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307 }, + { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025 }, + { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879 }, + { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419 }, + { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773 }, + { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 }, + { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 }, + { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 }, + { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 }, + { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 }, + { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 }, + { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 }, + { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 }, + { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 }, + { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 }, + { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 }, + { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 }, + { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 }, + { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 }, + { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 }, + { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 }, + { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 }, + { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 }, + { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 }, + { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 }, + { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 }, + { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 }, + { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 }, + { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 }, + { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 }, + { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 }, + { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 }, + { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 }, + { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 }, + { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 }, + { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 }, + { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 }, + { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 }, + { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 }, ] From ccfd3d5a61585560582ca2566798b867cebfcd29 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:12:29 +0200 Subject: [PATCH 50/78] test: fix small issues causing tests to fail --- src/lydata/accessor.py | 5 +++++ src/lydata/validator.py | 4 ++-- tests/conftest.py | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 0f84a88..99a30fb 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -399,6 +399,11 @@ def combine( 3 False 4 None """ + # We need the ability to pass the subdivisions for the `.enhance` method, + # but normally, we don't want to augment when combining. + if subdivisions is None: + subdivisions = {} + modalities = self._filter_modalities(modalities) obj_copy = self._obj.copy() diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 55042e1..e65d853 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -22,7 +22,7 @@ from loguru import logger from pandas import PeriodDtype -from pydantic import BaseModel, PastDate +from pydantic import BaseModel, Field, PastDate # noqa: F401 from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 from lydata.schema import create_full_record_model @@ -108,7 +108,7 @@ def _get_field_annotations( ... bar: int = 3 >>> class Baz(BaseModel): ... foo: Foo = Field(default_factory=Foo) - >>> get_field_annotations(Baz) + >>> _get_field_annotations(Baz) {'foo': {'bar': }} """ annotations = {} diff --git a/tests/conftest.py b/tests/conftest.py index 50ae6a4..fb0c35c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -20,7 +20,7 @@ def clb_raw() -> pd.DataFrame: ) -@pytest.fixture +@pytest.fixture(scope="session") def usz_2025_df() -> lydata.LyDataFrame: """Fixture to load a sample DataFrame from the USZ 2025 dataset.""" return next( From 66d21299ca5cf6aca1906f7525638b59457aea3e Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:44:32 +0200 Subject: [PATCH 51/78] fix: use default subdivisions in `.enhance()` --- src/lydata/accessor.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 99a30fb..7b90cab 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -385,6 +385,14 @@ def combine( The method :py:func:`.enhance` is a shorthand for combining, augmenting, and joining the results in a way similar to that example above. + .. warning:: + + Here, the default value for ``subdivisions`` is set to an empty dictionary. + This is because on the one hand, we still want to retain the functionality + of combining and augmenting in one step (necessary in the + :py:meth:`.enhance` method), but if not explicitly chosen, we keep only + the originally provided levels. + >>> df = pd.DataFrame({ ... ('CT' , 'ipsi', 'I'): [False, True , False, True, None], ... ('MRI' , 'ipsi', 'I'): [False, True , True , None, None], @@ -469,6 +477,13 @@ def enhance( the :py:meth:`~LyDataAccessor.augment` for every modality in ``modalities`` and the newly combined ``method`` column. """ + if subdivisions is None: + subdivisions = { + "I": ["a", "b"], + "II": ["a", "b"], + "V": ["a", "b"], + } + if modalities is None: modalities = get_default_modalities() From 3c9f5691dbf4a472a6ef1ec4ccd4168f9c519d13 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 19 Aug 2025 16:12:16 +0200 Subject: [PATCH 52/78] test: ensure diff does not change again --- scripts/new.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/new.py b/scripts/new.py index 25031c5..20a32af 100644 --- a/scripts/new.py +++ b/scripts/new.py @@ -1,7 +1,7 @@ # /// script # requires-python = ">=3.10" # dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@524eb4645ddd0719df1a22d4fc4956e4236b6976", +# "lydata @ git+https://github.com/lycosystem/lydata-package@66d21299ca5cf6aca1906f7525638b59457aea3e", # ] # /// From 220bbcc078394ef2a9f241e40dd22b47e946d866 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 21 Aug 2025 12:34:00 +0200 Subject: [PATCH 53/78] change: expand the schema --- src/lydata/schema.py | 66 ++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 2e5d4b3..5740ed0 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -21,7 +21,6 @@ RootModel, create_model, field_validator, - model_validator, ) from lydata.utils import get_default_modalities @@ -63,8 +62,12 @@ class PatientCore(BaseModel): description="Age of the patient at the time of diagnosis in years.", ) diagnose_date: PastDate = Field(description="Date of diagnosis of the patient.") - alcohol_abuse: bool = Field(description="Whether the patient abused alcohol.") - nicotine_abuse: bool = Field(description="Whether the patient abused nicotine.") + alcohol_abuse: bool = Field( + description="Whether the patient currently abuses alcohol." + ) + nicotine_abuse: bool = Field( + description="Whether the patient currently abuses nicotine." + ) pack_years: float | None = Field( default=None, ge=0, @@ -74,7 +77,12 @@ class PatientCore(BaseModel): default=None, description="Whether the patient was infected with HPV.", ) - neck_dissection: bool = Field(description="Did the patient have a neck dissection?") + neck_dissection: bool = Field( + description=( + "Whether the patient underwent neck dissection surgery as part of " + "their treatment." + ), + ) tnm_edition: int = Field( ge=6, le=8, @@ -86,11 +94,23 @@ class PatientCore(BaseModel): le=3, description="N stage of the patient according to the TNM classification.", ) + n_stage_suffix: Literal["a", "b", "c"] | None = Field( + default=None, + description=( + "Suffix for the N-stage according to the TNM classification. " + "Can be 'a', 'b', or 'c'." + ), + ) m_stage: int | None = Field( ge=0, le=1, description="M stage of the patient according to the TNM classification.", ) + weight: float | None = Field( + default=None, + ge=0, + description="Weight of the patient in kg at the time of diagnosis.", + ) @field_validator("pack_years", "hpv_status", "m_stage", mode="before") @classmethod @@ -98,16 +118,6 @@ def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" return None if pd.isna(value) else value - @model_validator(mode="after") - def check_nicotine_and_pack_years(self) -> PatientCore: - """Ensure that if nicotine abuse is False, pack_years is not > 0.""" - if not self.nicotine_abuse and ( - self.pack_years is not None and self.pack_years > 0 - ): - raise ValueError("If nicotine abuse is False, pack_years cannot be > 0.") - - return self - class PatientRecord(BaseModel): """A patient's record. @@ -144,6 +154,11 @@ class TumorCore(BaseModel): description="Whether the tumor extends over the mid-sagittal line.", default=False, ) + dist_to_midline: float | None = Field( + default=None, + ge=0, + description="Distance of the tumor to the mid-sagittal line in mm.", + ) volume: float | None = Field( default=None, ge=0, @@ -153,11 +168,22 @@ class TumorCore(BaseModel): default="c", description="Prefix for the tumor stage, 'c' = clinical, 'p' = pathological.", ) - t_stage: int | None = Field( - ge=0, + t_stage: int = Field( + ge=1, le=4, description="T stage of the tumor according to the TNM classification.", ) + t_stage_suffix: Literal["a", "b"] | None = Field( + default=None, + description=( + "Suffix for the T-stage according to the TNM classification. " + "Can be 'a', 'b', or 'c'." + ), + ) + side: Literal["left", "right"] | None = Field( + default=None, + description="Side of the neck where the main tumor mass is located.", + ) @field_validator("central", "volume", mode="before") @classmethod @@ -271,12 +297,12 @@ class BaseRecord(BaseModel): def create_full_record_model( modalities: list[str], - title: str = "FullRecord", + model_name: str = "FullRecord", **kwargs: dict[str, Any], ) -> type: - """Create a Pydantic model for a full record with all modalities.""" + """Create a Pydantic model for a full record with all ``modalities``.""" return create_model( - title, + model_name, __base__=BaseRecord, **{mod: create_modality_field(mod) for mod in modalities}, **kwargs, @@ -290,7 +316,7 @@ def _write_schema_to_file( """Write the Pydantic schema to a file.""" if schema is None: modalities = get_default_modalities() - schema = create_full_record_model(modalities, title="Record") + schema = create_full_record_model(modalities, model_name="Record") root_schema = RootModel[list[schema]] From c653c624c0ba89f3603c4c5dda976f260de90d97 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 21 Aug 2025 12:34:18 +0200 Subject: [PATCH 54/78] fix: make casting safer and better --- src/lydata/validator.py | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/lydata/validator.py b/src/lydata/validator.py index e65d853..8343011 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -20,8 +20,8 @@ from collections.abc import Mapping from typing import Any, Literal +import pandas as pd from loguru import logger -from pandas import PeriodDtype from pydantic import BaseModel, Field, PastDate # noqa: F401 from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 @@ -132,16 +132,20 @@ def _get_default_casters() -> Mapping[type, str]: str | None: "string", bool: bool, bool | None: "boolean", - PastDate: PeriodDtype("D"), - PastDate | None: PeriodDtype("D"), + PastDate: pd.PeriodDtype("D"), + PastDate | None: pd.PeriodDtype("D"), Literal["male", "female"]: "string", Literal["c", "p"]: "string", + Literal["a", "b"] | None: "string", + Literal["a", "b", "c"] | None: "string", + Literal["left", "right"] | None: "string", } def cast_dtypes( dataset: LyDataFrame, casters: Mapping[type, str] | None = None, + fail_on_error: bool = True, ) -> LyDataFrame: """Cast the dtypes of the ``dataset`` to the expected types. @@ -154,6 +158,8 @@ def cast_dtypes( pydantic that a field can be an integer or None. If you want to use a different mapping, you can pass it as the ``casters`` argument. """ + dataset = dataset.convert_dtypes() + if casters is None: casters = _get_default_casters() @@ -161,24 +167,37 @@ def cast_dtypes( FullRecord = create_full_record_model(modalities) # noqa: N806 annotations = _get_field_annotations(FullRecord) annotations = flatten(annotations, max_depth=3) - dtypes = {} for col in dataset.columns: annotation = annotations.get(col, None) - fallback = dataset[col].dtype + old_type = dataset[col].dtype + new_type = casters.get(annotation, old_type) if annotation is None: logger.warning( - f"No annotation found for column '{col}'. " - f"Using dtype {fallback} instead." + f"No annotation found for column '{col}'. Using {old_type=} instead. " + ) + continue + + if new_type == old_type: + logger.debug( + f"Column {col=} already has the expected type {old_type=}. Skipping." ) continue - dtypes[col] = casters.get(annotation, fallback) + try: + dataset = dataset.astype({col: new_type}) + logger.success(f"Cast {col=} from {old_type=} to {new_type=}.") + except TypeError as e: + msg = ( + f"Failed to cast column {col=} with ({annotation=}) to " + f"caster = `{new_type}." + ) + logger.error(msg) + if fail_on_error: + raise TypeError(msg) from e - result = dataset.astype(dtypes) - logger.success(f"Cast types: {result.dtypes.to_dict()}") - return result + return dataset if __name__ == "__main__": From 0049197c7541aa7358e1a031158ee32ad661c67c Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:46:54 +0200 Subject: [PATCH 55/78] feat: add pre-/suffixes to T/N stages in schema --- src/lydata/schema.py | 75 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 5740ed0..4f8c025 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -21,6 +21,7 @@ RootModel, create_model, field_validator, + model_validator, ) from lydata.utils import get_default_modalities @@ -89,10 +90,21 @@ class PatientCore(BaseModel): default=8, description="Edition of the TNM classification used for staging.", ) - n_stage: int | None = Field( - ge=0, + n_stage_prefix: Literal["c", "p"] | None = Field( + default=None, + description=( + "Prefix for the N stage, 'c' = clinical, 'p' = pathological. " + "This is used to distinguish between clinical and pathological staging." + ), + ) + n_stage: int = Field( + ge=-1, le=3, - description="N stage of the patient according to the TNM classification.", + description=( + "N stage of the patient according to the TNM classification. The value -1 " + "is reserved for the NX stage, which means that the lymph nodes could not " + "be assessed for involvement." + ), ) n_stage_suffix: Literal["a", "b", "c"] | None = Field( default=None, @@ -112,7 +124,15 @@ class PatientCore(BaseModel): description="Weight of the patient in kg at the time of diagnosis.", ) - @field_validator("pack_years", "hpv_status", "m_stage", mode="before") + @field_validator( + "pack_years", + "hpv_status", + "n_stage_prefix", + "n_stage_suffix", + "m_stage", + "weight", + mode="before", + ) @classmethod def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" @@ -164,20 +184,24 @@ class TumorCore(BaseModel): ge=0, description="Estimated volume of the tumor in cm³.", ) - stage_prefix: Literal["c", "p"] = Field( + t_stage_prefix: Literal["c", "p"] = Field( default="c", description="Prefix for the tumor stage, 'c' = clinical, 'p' = pathological.", ) t_stage: int = Field( - ge=1, + ge=-1, le=4, - description="T stage of the tumor according to the TNM classification.", + description=( + "T stage of the tumor according to the TNM classification. -1 is reserved " + "for the TX stage, meaning the presence of tumor could not be assessed." + ), ) - t_stage_suffix: Literal["a", "b"] | None = Field( + t_stage_suffix: Literal["is", "a", "b"] | None = Field( default=None, description=( "Suffix for the T-stage according to the TNM classification. " - "Can be 'a', 'b', or 'c'." + "Can be 'a' or 'b'. The value 'is' is reserved for the Tis stage, in which " + "case the `t_stage` should be 0." ), ) side: Literal["left", "right"] | None = Field( @@ -185,12 +209,43 @@ class TumorCore(BaseModel): description="Side of the neck where the main tumor mass is located.", ) - @field_validator("central", "volume", mode="before") + @field_validator( + "central", + "extension", + "dist_to_midline", + "volume", + "t_stage_suffix", + "side", + mode="before", + ) @classmethod def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" return None if pd.isna(value) else value + @model_validator(mode="after") + def check_t_stage(self) -> TumorCore: + """Ensure T-category is valid.""" + if self.t_stage == -1 and self.t_stage_suffix is not None: + raise ValueError( + f"{self.t_stage_suffix=}, but should be `None`, since " + f"{self.t_stage=}, indicating TX stage.", + ) + + if self.t_stage_suffix == "is" and self.t_stage != 0: + raise ValueError( + f"T-stage 'Tis' is indicated by t_stage=0 and t_stage_suffix='is'. " + f"But got {self.t_stage=} and {self.t_stage_suffix=}.", + ) + + if self.t_stage_suffix in ["a", "b"] and self.t_stage not in [1, 2, 3, 4]: + raise ValueError( + f"T-stage suffix {self.t_stage_suffix=} is only valid for T-stages " + f"1, 2, 3, or 4, but got {self.t_stage=}.", + ) + + return self + class TumorRecord(BaseModel): """A tumor record of a patient. From 6d1bc064b821a4521154b0a1f791498459d7285c Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:47:44 +0200 Subject: [PATCH 56/78] change: further improve validation --- src/lydata/__init__.py | 4 ++-- src/lydata/validator.py | 48 +++++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/lydata/__init__.py b/src/lydata/__init__.py index 049cb05..a46a60a 100644 --- a/src/lydata/__init__.py +++ b/src/lydata/__init__.py @@ -9,7 +9,7 @@ load_datasets, ) from lydata.querier import C, Q -from lydata.validator import validate +from lydata.validator import is_valid __author__ = "Roman Ludwig" __email__ = "roman.ludwig@usz.ch" @@ -23,7 +23,7 @@ "C", "available_datasets", "load_datasets", - "validate", + "is_valid", ] logger.disable("lydata") diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 8343011..47aa2e3 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -20,9 +20,8 @@ from collections.abc import Mapping from typing import Any, Literal -import pandas as pd from loguru import logger -from pydantic import BaseModel, Field, PastDate # noqa: F401 +from pydantic import BaseModel, Field, PastDate, ValidationError # noqa: F401 from lydata.accessor import LyDataAccessor, LyDataFrame # noqa: F401 from lydata.schema import create_full_record_model @@ -80,23 +79,30 @@ def unflatten(flat: dict) -> dict: return result -def validate(dataset: LyDataFrame) -> bool: - """Validate the given dataset against the lyDATA schema.""" +def is_valid(dataset: LyDataFrame, fail_on_error: bool = True) -> bool: + """Validate the given dataset against the lyDATA schema. + + Returns ``True`` if all records are valid, otherwise it either raises an error + (if ``fail_on_error`` is ``True``) or returns ``False``. + """ modalities = dataset.ly.get_modalities() FullRecord = create_full_record_model(modalities) # noqa: N806 + result = True - for i, row in dataset.iterrows(): + for _i, row in dataset.iterrows(): + patient_id = row.patient.core.id record = unflatten(row.to_dict()) - patient_id = record["patient"]["core"]["id"] - # move_value(record["patient"], from_key="#", to_key="core") - # move_value(record["tumor"], from_key="1", to_key="core") - - with logger.catch(message=f"Validation error for {patient_id=}"): - validated_record = FullRecord(**record) - logger.debug(f"Patient {i} is valid: {validated_record}") + try: + _validated_record = FullRecord(**record) + logger.debug(f"Successful validation of {patient_id=}") + except ValidationError as e: + if fail_on_error: + raise ValueError(f"Validation error for {patient_id=}") from e + logger.exception(e) + result = False - return True + return result def _get_field_annotations( @@ -132,8 +138,8 @@ def _get_default_casters() -> Mapping[type, str]: str | None: "string", bool: bool, bool | None: "boolean", - PastDate: pd.PeriodDtype("D"), - PastDate | None: pd.PeriodDtype("D"), + PastDate: "datetime64[ns]", + PastDate | None: "datetime64[ns]", Literal["male", "female"]: "string", Literal["c", "p"]: "string", Literal["a", "b"] | None: "string", @@ -174,15 +180,11 @@ def cast_dtypes( new_type = casters.get(annotation, old_type) if annotation is None: - logger.warning( - f"No annotation found for column '{col}'. Using {old_type=} instead. " - ) + logger.warning(f"No annotation found for {col=}. Using {old_type=}.") continue if new_type == old_type: - logger.debug( - f"Column {col=} already has the expected type {old_type=}. Skipping." - ) + logger.debug(f"Column {col=} already has expected {old_type=}. Skipping.") continue try: @@ -209,8 +211,8 @@ def cast_dtypes( dataset = next( loader.load_datasets( repo_name="lycosystem/lydata.private", - ref="6c56a630f307ffea12a2f071f18316f605beaa08", + ref="e68141fd5440d4cfa6491df14ca2203ddb7946b0", ) ) dataset = cast_dtypes(dataset) - validate(dataset) + print(f"{is_valid(dataset, fail_on_error=False)=}") # noqa: T201 From b18ef3ebe81ff0769e82171e2d1a4ea6b4608a87 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:36:09 +0200 Subject: [PATCH 57/78] docs: update schema & validation docstrings --- src/lydata/schema.py | 34 +++++++++++++++++++++++++--------- src/lydata/validator.py | 27 ++++++++++----------------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 4f8c025..fb8a41d 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -1,7 +1,11 @@ """Pydantic schema to define a single patient record. -Based on such a schema, pandera can create a DataFrameSchema to validate lyDATA sets. -Also, it may be used to create a HTML form to enter patient data. +This schema is useful for casting dtypes, as done in :py:func:`validator.cast_dtypes`, +validation via :py:func:`validator.is_valid`, and for exporting a JSON schema that +may be used for all kinds of purposes, e.g. to automatically generate HTML forms using +a `JSON-Editor`_. + +.. _JSON-Editor: https://json-editor.github.io/json-editor/ """ from __future__ import annotations @@ -54,15 +58,25 @@ class PatientCore(BaseModel): etc. """ - id: str = Field(description="Unique but anonymized identifier for a patient.") - institution: str = Field(description="Hospital where the patient was treated.") + id: str = Field( + description=( + "Unique but anonymized identifier for a patient. We commonly use the " + "format `YYYY--`, where `` is an abbreviation of the " + "institution (hospital) where the patient was treated." + ) + ) + institution: str = Field( + description="Name of the institution/hospital where the patient was treated." + ) sex: Literal["male", "female"] = Field(description="Biological sex of the patient.") age: int = Field( ge=0, le=120, description="Age of the patient at the time of diagnosis in years.", ) - diagnose_date: PastDate = Field(description="Date of diagnosis of the patient.") + diagnose_date: PastDate = Field( + description="Date of diagnosis of the patient (format YYYY-MM-DD)." + ) alcohol_abuse: bool = Field( description="Whether the patient currently abuses alcohol." ) @@ -80,8 +94,7 @@ class PatientCore(BaseModel): ) neck_dissection: bool = Field( description=( - "Whether the patient underwent neck dissection surgery as part of " - "their treatment." + "Whether the patient underwent neck dissection as part of their treatment." ), ) tnm_edition: int = Field( @@ -145,6 +158,9 @@ class PatientRecord(BaseModel): Because the final dataset has a three-level header, this record holds only the key ``core`` under which we store the actual patient information defined in the :py:class:`PatientCore` model. + + Alongside ``core``, this may at some point hold additional or optional information + about the patient. """ core: PatientCore = Field( @@ -250,8 +266,8 @@ def check_t_stage(self) -> TumorCore: class TumorRecord(BaseModel): """A tumor record of a patient. - As with the patient record, this holds only the key ``core`` under which we - store the actual tumor information defined in the :py:class:`TumorCore` model. + As with the :py:class:`PatientRecord`, this holds only the key ``core`` under which + we store the actual tumor information defined in the :py:class:`TumorCore` model. """ core: TumorCore = Field( diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 47aa2e3..413f633 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -1,19 +1,12 @@ -"""Module to transform to and validate the CSV schema of the lydata datasets. +"""Module to cast dtypes and to and validate the lyDATA datasets. -Here we define the function :py:func:`construct_schema` to dynamically create a -:py:class:`pandera.DataFrameSchema` that we can use to validate that a given -:py:class:`~pandas.DataFrame` conforms to the minimum requirements of the lyDATA -datasets. +The two main functions here are :py:func:`cast_dtypes` and :py:func:`is_valid`. The +first one can be used to cast the dtypes of the columns in a :py:class:`LyDataFrame` +to the expected types according to the schema constructed using +:py:func:`create_full_record_model`. -Currently, we only publish the :py:func:`validate_datasets` function that validates all -datasets that are found by the function :py:func:`~lydata.loader.available_datasets`. -In the future, we may want to make this more flexible. - -In this module, we also provide the :py:func:`transform_to_lyprox` function that can be -used to transform any raw data into the format that can be uploaded to the `LyProX`_ -platform database. - -.. _LyProX: https://lyprox.org +Subsequently, :py:func:`is_valid` can be used to validate every row in the table, again +using the constructed schema. """ import sys @@ -130,13 +123,13 @@ def _get_field_annotations( def _get_default_casters() -> Mapping[type, str]: """Get the default dtype casters for the lyDATA schema.""" return { - int: int, + int: "Int64", int | None: "Int64", - float: float, + float: "Float64", float | None: "Float64", str: "string", str | None: "string", - bool: bool, + bool: "boolean", bool | None: "boolean", PastDate: "datetime64[ns]", PastDate | None: "datetime64[ns]", From 9490b0b1d6f955eece294bf5d23e492bdbaf6e7e Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:36:42 +0200 Subject: [PATCH 58/78] feat: casting, validating, & enhancing during load --- src/lydata/loader.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/lydata/loader.py b/src/lydata/loader.py index 0f7f1be..67fe367 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -32,6 +32,7 @@ from lydata.accessor import LyDataFrame from lydata.utils import get_github_auth +from lydata.validator import cast_dtypes, is_valid _default_repo_name = "lycosystem/lydata" low_min1_str = constr(to_lower=True, min_length=1) @@ -305,13 +306,25 @@ def load_datasets( use_github: bool = True, repo_name: str = _default_repo_name, ref: str = "main", + cast: bool = False, + validate: bool = False, + enhance: bool = False, **kwargs, ) -> Generator[LyDataFrame, None, None]: - """Load matching datasets from the disk. + """Load matching datasets from GitHub or from the disk. It loads every dataset from the :py:class:`.LyDataset` instances generated by - the :py:func:`available_datasets` function, which also receives all arguments of + the :py:func:`available_datasets` function, which also receives most arguments of this function. + + The boolean flags ``cast``, ``validate``, and ``enhance`` can be used to + automatically cast the dtypes of the loaded :py:class:`pandas.DataFrame`s, + validate them, and enhance them with additional columns. These operations are + performed using the :py:func:`~lydata.cast_dtypes`, :py:func:`~lydata.is_valid`, + the :py:func:`~lydata.LyDataAccessor.enhance` method, respectively. + + Additional keyword arguments are passed to the :py:meth:`LyDataset.get_dataframe` + method. """ dset_confs = available_datasets( year=year, @@ -323,4 +336,14 @@ def load_datasets( ref=ref, ) for dset_conf in dset_confs: - yield dset_conf.get_dataframe(use_github=use_github, **kwargs) + df: LyDataFrame = dset_conf.get_dataframe(use_github=use_github, **kwargs) + + if cast: + df = cast_dtypes(df) + + _ = validate and is_valid(df, fail_on_error=True) + + if enhance: + df = df.ly.enhance() + + yield df From 8163d9e70288ebd3be61b9060fc1e7c201a3ef90 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:37:02 +0200 Subject: [PATCH 59/78] test: update to new, cast data --- tests/conftest.py | 19 ++++++++++++++++++- tests/test_accessor.py | 20 ++------------------ tests/test_augmentor.py | 29 ++++++++++------------------- tests/test_schema.py | 2 +- tests/test_utils.py | 2 +- tests/test_validation.py | 19 +++++-------------- 6 files changed, 37 insertions(+), 54 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index fb0c35c..a8f7e60 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -15,11 +15,27 @@ def clb_raw() -> pd.DataFrame: institution="clb", subsite="oropharynx", use_github=True, - ref="4668ff6006764169411d6d198c126b020a7892b2", + repo_name="lycosystem/lydata.private", + ref="e68141fd5440d4cfa6491df14ca2203ddb7946b0", + cast=True, ), ) +@pytest.fixture(scope="session") +def usz_2021_df() -> pd.DataFrame: + """Load the CLB dataset.""" + return next( + lydata.load_datasets( + year=2021, + institution="usz", + repo_name="lycosystem/lydata.private", + ref="fb55afa26ff78afa78274a86b131fb3014d0ceea", + cast=True, + ) + ) + + @pytest.fixture(scope="session") def usz_2025_df() -> lydata.LyDataFrame: """Fixture to load a sample DataFrame from the USZ 2025 dataset.""" @@ -29,5 +45,6 @@ def usz_2025_df() -> lydata.LyDataFrame: institution="usz", repo_name="lycosystem/lydata.private", ref="c11011aa928fe43f18e73e42577a0fcee5652d99", + cast=True, ) ) diff --git a/tests/test_accessor.py b/tests/test_accessor.py index bb50743..c83ad77 100644 --- a/tests/test_accessor.py +++ b/tests/test_accessor.py @@ -1,27 +1,11 @@ """Test the ``.ly`` accessor for lyDATA DataFrames.""" -import pytest - import lydata # noqa: F401 -from lydata import loader - - -@pytest.fixture -def usz_df() -> lydata.LyDataFrame: - """Fixture to load a sample DataFrame from the USZ dataset.""" - return next( - loader.load_datasets( - year=2021, - institution="usz", - repo_name="lycosystem/lydata.private", - ref="fb55afa26ff78afa78274a86b131fb3014d0ceea", - ) - ) -def test_enhance(usz_df: lydata.LyDataFrame) -> None: +def test_enhance(usz_2021_df: lydata.LyDataFrame) -> None: """Test the enhance method of the ly accessor.""" - enhanced = usz_df.ly.enhance() + enhanced = usz_2021_df.ly.enhance() assert enhanced.shape == (287, 250) assert "max_llh" in enhanced.columns assert "Ia" in enhanced.max_llh.ipsi diff --git a/tests/test_augmentor.py b/tests/test_augmentor.py index 85819f2..c7e77a3 100644 --- a/tests/test_augmentor.py +++ b/tests/test_augmentor.py @@ -26,26 +26,26 @@ def test_clb_patient_17(clb_raw: pd.DataFrame) -> None: assert clb_aug.iloc[16].ipsi.Ib == False -def test_clb_patient_p011(clb_raw: pd.DataFrame) -> None: +def test_2021_clb_001(clb_raw: pd.DataFrame) -> None: """Check that this patient's `NaN` values are handled correctly. In this patient, the sublvls are missing, therefore the superlvls should not be overridden by the augmentor. """ - idx = clb_raw.ly.id == "P011" + idx = clb_raw.ly.id == "2021-CLB-001" patient = clb_raw.loc[idx] enhanced = patient.ly.enhance() assert enhanced.iloc[0].pathology.ipsi.II == patient.iloc[0].pathology.ipsi.II -def test_clb_patient_p035(clb_raw: pd.DataFrame) -> None: +def test_2021_clb_017(clb_raw: pd.DataFrame) -> None: """Check that this patient's `NaN` values are handled correctly. In this patient, pathology reports ipsi.Ib as healthy, while diagnostic consensus reports ipsi.Ib as involved. This should correctly be combined to ipsi.Ib = False and the superlvl should also be set to False. """ - idx = clb_raw.ly.id == "P035" + idx = clb_raw.ly.id == "2021-CLB-017" patient = clb_raw.loc[idx] enhanced = patient.ly.enhance() assert len(patient) == len(enhanced) == 1, "Patient data length mismatch" @@ -53,29 +53,20 @@ def test_clb_patient_p035(clb_raw: pd.DataFrame) -> None: assert enhanced.iloc[0].max_llh.ipsi.Ib == False -def test_usz_patient_9() -> None: +def test_2021_usz_009(usz_2021_df: pd.DataFrame) -> None: """Check the advanced combination and augmentation of diagnoses and levels.""" - usz_raw = next( - lydata.load_datasets( - year=2021, - institution="usz", - subsite="oropharynx", - use_github=True, - ref="4668ff6006764169411d6d198c126b020a7892b2", - ), - ) modalities = get_default_modalities() modalities = { name: mod for name, mod in modalities.items() - if name in usz_raw.columns.get_level_values(0) + if name in usz_2021_df.columns.get_level_values(0) } usz_aug = combine_and_augment_levels( - diagnoses=[usz_raw[mod] for mod in modalities.keys()], + diagnoses=[usz_2021_df[mod] for mod in modalities.keys()], specificities=[mod.spec for mod in modalities.values()], sensitivities=[mod.sens for mod in modalities.values()], ) - assert len(usz_aug) == len(usz_raw), "Augmented data length mismatch" + assert len(usz_aug) == len(usz_2021_df), "Augmented data length mismatch" assert usz_aug.iloc[8].ipsi.III == False @@ -94,7 +85,7 @@ def test_2025_usz_312(usz_2025_df: lydata.LyDataFrame) -> None: idx = usz_2025_df.ly.id == "2025-USZ-312" patient = usz_2025_df.loc[idx] assert len(patient) == 1 - assert patient.ly.date.iloc[0] == "2013-06-03" + assert patient.ly.date.iloc[0].strftime("%Y-%m-%d") == "2013-06-03" enhanced = patient.ly.enhance() assert len(enhanced) == 1 @@ -111,7 +102,7 @@ def test_2025_usz_075(usz_2025_df: lydata.LyDataFrame) -> None: idx = usz_2025_df.ly.id == "2025-USZ-075" patient = usz_2025_df.loc[idx] assert len(patient) == 1 - assert patient.ly.date.iloc[0] == "2015-11-23" + assert patient.ly.date.iloc[0].strftime("%Y-%m-%d") == "2015-11-23" assert patient.FNA.contra.II.iloc[0] == True enhanced = patient.ly.enhance( diff --git a/tests/test_schema.py b/tests/test_schema.py index bc694b9..f4db1a8 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -42,7 +42,7 @@ def tumor_core_dict() -> dict[str, Any]: "subsite": "C03.9", "central": False, "extension": True, - "stage_prefix": "c", + "t_stage_prefix": "c", "t_stage": 2, } diff --git a/tests/test_utils.py b/tests/test_utils.py index 192b779..760915e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -7,7 +7,7 @@ def test_update_and_expand_using_p035(clb_raw: pd.DataFrame) -> None: """Check the `update_and_expand` function with a specific patient.""" - idx = clb_raw.ly.id == "P035" + idx = clb_raw.ly.id == "2021-CLB-017" patient = clb_raw.loc[idx] combined = patient.ly.combine() combined = pd.concat({"test": combined}, axis="columns") diff --git a/tests/test_validation.py b/tests/test_validation.py index d5d4cf0..03fe144 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,24 +1,15 @@ """Test the casting and validation of lydata datasets.""" -from lydata import load_datasets +import pandas as pd + from lydata.validator import cast_dtypes -def test_casting() -> None: +def test_casting(clb_raw: pd.DataFrame) -> None: """Test the casting of a dataset.""" - clb_raw = next( - load_datasets( - year=2021, - institution="clb", - subsite="oropharynx", - use_github=True, - repo_name="lycosystem/lydata.private", - ref="6c56a630f307ffea12a2f071f18316f605beaa08", - ) - ) clb_casted = cast_dtypes(clb_raw) assert clb_casted.patient.core.id.dtype == "string" - assert clb_casted.patient.core.age.dtype == "int64" - assert clb_casted.patient.core.diagnose_date.dtype == "period[D]" + assert clb_casted.patient.core.age.dtype == "Int64" + assert clb_casted.patient.core.diagnose_date.dtype == "datetime64[ns]" assert clb_casted.tumor.core.t_stage.dtype == "Int64" From 02f7a8e8e7494802421186f72d48ce6201374b50 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 09:56:01 +0200 Subject: [PATCH 60/78] fix: avoid pydantic's weird TypeError for pd.NaT --- src/lydata/schema.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index fb8a41d..0c29af0 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -50,6 +50,15 @@ ] +def convert_nat(value: Any) -> Any: + """Convert pandas NaT to None. + + pydantic throws an unspecific ``TypeError`` when ``pd.NaT`` is passed to a field. + See [this issue on Github](https://github.com/pydantic/pydantic/issues/8039). + """ + return None if pd.isna(value) else value + + class PatientCore(BaseModel): """Basic required patient information. @@ -74,7 +83,7 @@ class PatientCore(BaseModel): le=120, description="Age of the patient at the time of diagnosis in years.", ) - diagnose_date: PastDate = Field( + diagnose_date: Annotated[PastDate, BeforeValidator(convert_nat)] = Field( description="Date of diagnosis of the patient (format YYYY-MM-DD)." ) alcohol_abuse: bool = Field( @@ -288,7 +297,7 @@ def create_lnl_field(lnl: str) -> tuple[type, Field]: class ModalityCore(BaseModel): """Basic info about a diagnostic/pathological modality.""" - date: PastDate | None = Field( + date: Annotated[PastDate | None, BeforeValidator(convert_nat)] = Field( description="Date of the diagnostic or pathological modality.", default=None, ) From e59454d943b1ad9eab70d8082d6ce7af1b3c6d0f Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:14:41 +0200 Subject: [PATCH 61/78] fix: check central info in schema --- src/lydata/__init__.py | 1 + src/lydata/schema.py | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lydata/__init__.py b/src/lydata/__init__.py index a46a60a..3d8476a 100644 --- a/src/lydata/__init__.py +++ b/src/lydata/__init__.py @@ -27,3 +27,4 @@ ] logger.disable("lydata") +logger.remove() diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 0c29af0..7ec3c10 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -229,7 +229,7 @@ class TumorCore(BaseModel): "case the `t_stage` should be 0." ), ) - side: Literal["left", "right"] | None = Field( + side: Literal["left", "right", "central"] | None = Field( default=None, description="Side of the neck where the main tumor mass is located.", ) @@ -248,6 +248,14 @@ def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" return None if pd.isna(value) else value + @model_validator(mode="after") + def check_tumor_side(self) -> TumorCore: + """Ensure tumor side information is consistent with ``central``.""" + if not (self.central == (self.side == "central")): + raise ValueError(f"{self.central=}, but {self.side=}.") + + return self + @model_validator(mode="after") def check_t_stage(self) -> TumorCore: """Ensure T-category is valid.""" From 3ba50b2a7cb94a2176deeff59f8c00c619e636c6 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:38:52 +0200 Subject: [PATCH 62/78] fix: call `logger.error` over `exception` This deduplicates the output. --- src/lydata/validator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lydata/validator.py b/src/lydata/validator.py index 413f633..ea3ed78 100644 --- a/src/lydata/validator.py +++ b/src/lydata/validator.py @@ -92,7 +92,7 @@ def is_valid(dataset: LyDataFrame, fail_on_error: bool = True) -> bool: except ValidationError as e: if fail_on_error: raise ValueError(f"Validation error for {patient_id=}") from e - logger.exception(e) + logger.error(f"{patient_id}: {e}") result = False return result From 884a0d9d08ea4818e9d8389f179f9bbf2d027376 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:45:07 +0200 Subject: [PATCH 63/78] fix: allow MX=-1 in schema --- src/lydata/schema.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 7ec3c10..db28705 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -136,9 +136,13 @@ class PatientCore(BaseModel): ), ) m_stage: int | None = Field( - ge=0, + ge=-1, le=1, - description="M stage of the patient according to the TNM classification.", + description=( + "M stage of the patient according to the TNM classification. The value -1 " + "is reserved for the MX stage, which technically doesn't exist, but it is " + "commonly used." + ), ) weight: float | None = Field( default=None, From 1e22f1b9563aa59bf45e9cf65d5c18b0f24d5dd3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:49:55 +0200 Subject: [PATCH 64/78] fix: allow `None` in more patient fields --- src/lydata/schema.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index db28705..352c0cd 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -86,10 +86,10 @@ class PatientCore(BaseModel): diagnose_date: Annotated[PastDate, BeforeValidator(convert_nat)] = Field( description="Date of diagnosis of the patient (format YYYY-MM-DD)." ) - alcohol_abuse: bool = Field( + alcohol_abuse: bool | None = Field( description="Whether the patient currently abuses alcohol." ) - nicotine_abuse: bool = Field( + nicotine_abuse: bool | None = Field( description="Whether the patient currently abuses nicotine." ) pack_years: float | None = Field( @@ -101,7 +101,7 @@ class PatientCore(BaseModel): default=None, description="Whether the patient was infected with HPV.", ) - neck_dissection: bool = Field( + neck_dissection: bool | None = Field( description=( "Whether the patient underwent neck dissection as part of their treatment." ), @@ -151,10 +151,13 @@ class PatientCore(BaseModel): ) @field_validator( + "alcohol_abuse", + "nicotine_abuse", "pack_years", "hpv_status", "n_stage_prefix", "n_stage_suffix", + "neck_dissection", "m_stage", "weight", mode="before", From a60a8afbe7916755859ab323de1dd473409c3fa3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:07:41 +0200 Subject: [PATCH 65/78] fix: allow central & side to be `None` --- src/lydata/schema.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 352c0cd..4867770 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -136,6 +136,7 @@ class PatientCore(BaseModel): ), ) m_stage: int | None = Field( + default=None, ge=-1, le=1, description=( @@ -258,6 +259,9 @@ def nan_to_none(cls, value: Any) -> Any: @model_validator(mode="after") def check_tumor_side(self) -> TumorCore: """Ensure tumor side information is consistent with ``central``.""" + if self.central is None and self.side is None: + return self + if not (self.central == (self.side == "central")): raise ValueError(f"{self.central=}, but {self.side=}.") From c5c6ad3d928a3b6ce5e7e60e6c16e703b6f73d23 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 13:31:02 +0200 Subject: [PATCH 66/78] fix: side may be `None` when central=`True` --- src/lydata/schema.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index 4867770..fd0c157 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -259,10 +259,7 @@ def nan_to_none(cls, value: Any) -> Any: @model_validator(mode="after") def check_tumor_side(self) -> TumorCore: """Ensure tumor side information is consistent with ``central``.""" - if self.central is None and self.side is None: - return self - - if not (self.central == (self.side == "central")): + if self.side == "central" and not self.central: raise ValueError(f"{self.central=}, but {self.side=}.") return self From 93aac555929eefb5e95b81e01fbf9f451bf893b3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 13:35:59 +0200 Subject: [PATCH 67/78] fix: make some fields robust to uppercase strings --- src/lydata/schema.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/lydata/schema.py b/src/lydata/schema.py index fd0c157..adc7ebd 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -168,6 +168,20 @@ def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" return None if pd.isna(value) else value + @field_validator( + "sex", + "n_stage_prefix", + "n_stage_suffix", + mode="before", + ) + @classmethod + def to_lower(cls, value: Any) -> Any: + """Convert string values to lower case.""" + if isinstance(value, str): + return value.lower() + + return value + class PatientRecord(BaseModel): """A patient's record. @@ -256,6 +270,21 @@ def nan_to_none(cls, value: Any) -> Any: """Convert NaN values to None.""" return None if pd.isna(value) else value + @field_validator( + "location", + "t_stage_prefix", + "t_stage_suffix", + "side", + mode="before", + ) + @classmethod + def to_lower(cls, value: Any) -> Any: + """Convert string values to lower case.""" + if isinstance(value, str): + return value.lower() + + return value + @model_validator(mode="after") def check_tumor_side(self) -> TumorCore: """Ensure tumor side information is consistent with ``central``.""" From 1e6196bdbd0b16af5f6d4c97951b03e53e34caf4 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:00:44 +0200 Subject: [PATCH 68/78] docs: add new modules to sphinx --- docs/source/augmentor.rst | 7 +++++++ docs/source/index.md | 3 +++ docs/source/querier.rst | 7 +++++++ docs/source/schema.rst | 7 +++++++ docs/source/validator.rst | 4 ++-- src/lydata/accessor.py | 2 +- src/lydata/schema.py | 6 +++--- 7 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 docs/source/augmentor.rst create mode 100644 docs/source/querier.rst create mode 100644 docs/source/schema.rst diff --git a/docs/source/augmentor.rst b/docs/source/augmentor.rst new file mode 100644 index 0000000..5333954 --- /dev/null +++ b/docs/source/augmentor.rst @@ -0,0 +1,7 @@ +.. currentmodule:: lydata.augmentor + +Enhancing and Augmenting Datasets +================================= + +.. automodule:: lydata.augmentor + :members: diff --git a/docs/source/index.md b/docs/source/index.md index 4bd9338..157408a 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -9,7 +9,10 @@ :maxdepth: 2 accessor +augmentor loader +querier +schema utils validator ::: diff --git a/docs/source/querier.rst b/docs/source/querier.rst new file mode 100644 index 0000000..1ca22f0 --- /dev/null +++ b/docs/source/querier.rst @@ -0,0 +1,7 @@ +.. currentmodule:: lydata.querier + +Efficient and Reusable DataFrame Queries +======================================== + +.. automodule:: lydata.querier + :members: diff --git a/docs/source/schema.rst b/docs/source/schema.rst new file mode 100644 index 0000000..b09556b --- /dev/null +++ b/docs/source/schema.rst @@ -0,0 +1,7 @@ +.. currentmodule:: lydata.schema + +Formal Definition of a Patient Record +===================================== + +.. automodule:: lydata.schema + :members: diff --git a/docs/source/validator.rst b/docs/source/validator.rst index a19dbba..7cdfa0c 100644 --- a/docs/source/validator.rst +++ b/docs/source/validator.rst @@ -1,7 +1,7 @@ .. currentmodule:: lydata.validator -Pandera Schemas to Validate Datasets -==================================== +Type Casting and Validation +=========================== .. automodule:: lydata.validator :members: diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 7b90cab..2b96c31 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -11,7 +11,7 @@ as easy as typing ``df.ly.age``. Beyond that, we implement methods like :py:meth:`~LyDataAccessor.query` for filtering -the DataFrame using reusable query objects (see the :py:module:`lydata.querier` module +the DataFrame using reusable query objects (see the :py:mod:`lydata.querier` module for more information), :py:meth:`~LyDataAccessor.stats` for computing common statistics that we use in our `LyProX`_ web app, and :py:meth:`~LyDataAccessor.combine` for combining diagnoses from different modalities into a single column. diff --git a/src/lydata/schema.py b/src/lydata/schema.py index adc7ebd..42a0859 100644 --- a/src/lydata/schema.py +++ b/src/lydata/schema.py @@ -1,7 +1,7 @@ """Pydantic schema to define a single patient record. This schema is useful for casting dtypes, as done in :py:func:`validator.cast_dtypes`, -validation via :py:func:`validator.is_valid`, and for exporting a JSON schema that +validation via :py:func:`~validator.is_valid`, and for exporting a JSON schema that may be used for all kinds of purposes, e.g. to automatically generate HTML forms using a `JSON-Editor`_. @@ -165,7 +165,7 @@ class PatientCore(BaseModel): ) @classmethod def nan_to_none(cls, value: Any) -> Any: - """Convert NaN values to None.""" + """Convert NaN values to None to avoid pydantic errors.""" return None if pd.isna(value) else value @field_validator( @@ -176,7 +176,7 @@ def nan_to_none(cls, value: Any) -> Any: ) @classmethod def to_lower(cls, value: Any) -> Any: - """Convert string values to lower case.""" + """Convert some string fields to lower case before validation.""" if isinstance(value, str): return value.lower() From 8469a26bea1d275b7ced43fbe3a269c8b30b60f4 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 26 Aug 2025 11:16:24 +0200 Subject: [PATCH 69/78] feat: add a `.get_tnm()` helper method --- src/lydata/accessor.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/lydata/accessor.py b/src/lydata/accessor.py index 2b96c31..c297a94 100644 --- a/src/lydata/accessor.py +++ b/src/lydata/accessor.py @@ -228,6 +228,42 @@ def get_modalities(self, ignore_cols: list[str] | None = None) -> list[str]: return modalities + def get_tnm(self) -> pd.DataFrame: + """Return the T, N, and M stage with all pre- and suffixes. + + This info will be collected in three separate column `"T"`, `"N"`, and `"M"`. + + >>> df = pd.DataFrame({ + ... ('tumor', 'core', 't_stage_prefix'): ['c', 'p'], + ... ('tumor', 'core', 't_stage'): [2 , 3 ], + ... ('tumor', 'core', 't_stage_suffix'): ['a', 'b'], + ... ('patient', 'core', 'n_stage'): [1 , 2 ], + ... ('patient', 'core', 'n_stage_suffix'): ['a', 'b'], + ... ('patient', 'core', 'm_stage'): [0 , 1 ], + ... }) + >>> df.ly.get_tnm() # doctest: +NORMALIZE_WHITESPACE + T N M + 0 c2a 1a 0 + 1 p3b 2b 1 + """ + empty = pd.Series([""] * len(self._obj), index=self._obj.index) + result = pd.DataFrame(index=self._obj.index) + + for stage in ("t", "n", "m"): + tmp = pd.DataFrame(index=self._obj.index) + for part in ["prefix", "", "suffix"]: + name = "_".join([stage, "stage", part]).strip("_") + try: + col = self._obj.xs(name, axis="columns", level=2).iloc[:, 0] + except KeyError: + col = empty.copy() + + tmp = pd.concat([tmp, col], axis="columns") + + result[stage.upper()] = tmp.astype(str).agg("".join, axis="columns") + + return result + def _get_mask(self, query: CanExecute | None = None) -> pd.Series: """Safely get a boolean mask for the DataFrame based on the query.""" if query is None: @@ -535,3 +571,9 @@ class LyDataFrame(pd.DataFrame): ly: LyDataAccessor """The custom lydata accessor for these DataFrame subclass instances.""" + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 6812761fbad60318444098b2232297d530d0d805 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:53:06 +0200 Subject: [PATCH 70/78] feat: fail more informatively when loading Fixes: #10 --- src/lydata/loader.py | 54 +++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/src/lydata/loader.py b/src/lydata/loader.py index 67fe367..6c47cdf 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -25,8 +25,9 @@ import numpy as np # noqa: F401 import pandas as pd -from github import Github, Repository +from github import BadCredentialsException, Github, Repository, UnknownObjectException from github.ContentFile import ContentFile +from github.GithubException import GithubException from loguru import logger from pydantic import BaseModel, Field, PrivateAttr, constr @@ -198,6 +199,34 @@ def _available_datasets_on_disk( ) +def _safely_fetch_repo(gh: Github, repo_name: str) -> Repository: + """Fetch a GitHub repository, handling common errors.""" + try: + repo = gh.get_repo(repo_name) + except UnknownObjectException as e: + raise ValueError(f"Could not find repository '{repo_name}' on GitHub.") from e + except BadCredentialsException as e: + raise ValueError("Invalid GitHub credentials.") from e + + return repo + + +def _safely_fetch_contents(repo: Repository, ref: str) -> list[ContentFile]: + """Fetch contents of a GitHub ``repo`` at a specific ``ref``, handling errors.""" + try: + contents = repo.get_contents(path="", ref=ref) + except GithubException as e: + available_branches = [b.name for b in repo.get_branches()] + available_tags = [t.name for t in repo.get_tags()] + raise ValueError( + f"Could not find ref '{ref}' in repository '{repo.full_name}'.\n" + f"Available branches: {available_branches}.\n" + f"Available tags: {available_tags}." + ) from e + + return contents + + def _available_datasets_on_github( year: int | str = "*", institution: str = "*", @@ -205,10 +234,10 @@ def _available_datasets_on_github( repo_name: str = _default_repo_name, ref: str = "main", ) -> Generator[LyDataset, None, None]: + """Generate :py:class:`.LyDataset` instances of available datasets on GitHub.""" gh = Github(auth=get_github_auth()) - - repo = gh.get_repo(repo_name) - contents = repo.get_contents(path="", ref=ref) + repo = _safely_fetch_repo(gh=gh, repo_name=repo_name) + contents = _safely_fetch_contents(repo=repo, ref=ref) matches = [] for content in contents: @@ -217,6 +246,12 @@ def _available_datasets_on_github( ): matches.append(content) + if len(matches) == 0: + raise ValueError( + f"No datasets found in repository '{repo_name}' matching " + f"'{year}-{institution}-{subsite}' at ref '{ref}'." + ) + for match in matches: year, institution, subsite = match.name.split("-", maxsplit=2) yield LyDataset( @@ -337,13 +372,6 @@ def load_datasets( ) for dset_conf in dset_confs: df: LyDataFrame = dset_conf.get_dataframe(use_github=use_github, **kwargs) - - if cast: - df = cast_dtypes(df) - + df = cast_dtypes(df) if cast else df _ = validate and is_valid(df, fail_on_error=True) - - if enhance: - df = df.ly.enhance() - - yield df + yield df.ly.enhance() if enhance else df From d3b8e06c6697804a066662ddd26261323ee2add2 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 27 Aug 2025 10:10:55 +0200 Subject: [PATCH 71/78] fix: allow loading from disk using custom paths --- src/lydata/loader.py | 116 +++++++++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 42 deletions(-) diff --git a/src/lydata/loader.py b/src/lydata/loader.py index 6c47cdf..6f607b8 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -29,7 +29,14 @@ from github.ContentFile import ContentFile from github.GithubException import GithubException from loguru import logger -from pydantic import BaseModel, Field, PrivateAttr, constr +from pydantic import ( + BaseModel, + DirectoryPath, + Field, + PrivateAttr, + RootModel, + constr, +) from lydata.accessor import LyDataFrame from lydata.utils import get_github_auth @@ -43,6 +50,38 @@ class SkipDiskError(Exception): """Raised when the user wants to skip loading from disk.""" +def _safely_fetch_repo(gh: Github, repo_name: str) -> Repository: + """Fetch a GitHub repository, handling common errors.""" + try: + logger.debug(f"Fetching repository '{repo_name}' from GitHub...") + repo = gh.get_repo(repo_name) + except UnknownObjectException as e: + raise ValueError(f"Could not find repository '{repo_name}' on GitHub.") from e + except BadCredentialsException as e: + raise ValueError("Invalid GitHub credentials.") from e + + logger.debug(f"Fetched repository '{repo.full_name}' from GitHub.") + return repo + + +def _safely_fetch_contents(repo: Repository, ref: str) -> list[ContentFile]: + """Fetch contents of a GitHub ``repo`` at a specific ``ref``, handling errors.""" + try: + logger.debug(f"Fetching contents of repo '{repo.full_name}' at ref '{ref}'...") + contents = repo.get_contents(path="", ref=ref) + except GithubException as e: + available_branches = [b.name for b in repo.get_branches()] + available_tags = [t.name for t in repo.get_tags()] + raise ValueError( + f"Could not find ref '{ref}' in repository '{repo.full_name}'.\n" + f"Available branches: {available_branches}.\n" + f"Available tags: {available_tags}." + ) from e + + logger.debug(f"Fetched contents of repo '{repo.full_name}' at ref '{ref}'.") + return contents + + class LyDataset(BaseModel): """Specification of a dataset.""" @@ -57,14 +96,23 @@ class LyDataset(BaseModel): subsite: low_min1_str = Field( description="Tumor subsite(s) patients in this dataset were diagnosed with.", ) - repo_name: low_min1_str = Field( + repo_name: low_min1_str | None = Field( default=_default_repo_name, description="GitHub `repository/owner`.", ) - ref: low_min1_str = Field( + ref: low_min1_str | None = Field( default="main", description="Branch/tag/commit of the repo.", ) + local_dataset_dir: DirectoryPath | None = Field( + default=None, + description=( + "Path to directory containing all the dataset subdirectories. So, e.g. if " + "`path_on_disk` is `~/datasets` and the dataset is `2023-clb-multisite`, " + "then the CSV file is expected to be at " + "`~/datasets/2023-clb-multisite/data.csv`." + ), + ) _content_file: ContentFile | None = PrivateAttr(default=None) @property @@ -77,11 +125,17 @@ def name(self) -> str: """ return f"{self.year}-{self.institution}-{self.subsite}" - @property - def path_on_disk(self) -> Path: - """Get the path to the dataset.""" - install_loc = Path(__file__).parent.parent - return install_loc / self.name / "data.csv" + def get_file_path(self) -> Path: + """Get the path to the CSV dataset.""" + if self.local_dataset_dir is None: + self.local_dataset_dir = Path(__file__).parent.parent + + dataset_path = self.local_dataset_dir / self.name / "data.csv" + if not dataset_path.exists(): + raise FileNotFoundError(f"Could not find CSV locally at '{dataset_path}'.") + + logger.info(f"Found dataset {self.name} on disk at '{dataset_path}'.") + return dataset_path def get_repo( self, @@ -108,9 +162,7 @@ def get_repo( """ auth = get_github_auth(token=token, user=user, password=password) gh = Github(auth=auth) - repo = gh.get_repo(self.repo_name) - logger.info(f"Fetched repository {repo.full_name} from GitHub.") - return repo + return _safely_fetch_repo(gh=gh, repo_name=self.repo_name) def get_content_file( self, @@ -138,7 +190,7 @@ def get_content_file( return self._content_file repo = self.get_repo(token=token, user=user, password=password) - self._content_file = repo.get_contents(f"{self.name}/data.csv", ref=self.ref) + self._content_file = _safely_fetch_contents(repo=repo, ref=self.ref) return self._content_file def get_dataframe( @@ -171,7 +223,7 @@ def get_dataframe( token=token, user=user, password=password ).download_url else: - from_location = self.path_on_disk + from_location = self.get_file_path() df = pd.read_csv(from_location, **kwargs) logger.info(f"Loaded dataset {self.name} from {from_location}.") @@ -186,47 +238,27 @@ def _available_datasets_on_disk( search_paths: list[Path] | None = None, ) -> Generator[LyDataset, None, None]: pattern = f"{str(year)}-{institution}-{subsite}" - search_paths = search_paths or [Path(__file__).parent.parent] + + if search_paths is None: + search_paths = [Path(__file__).parent.parent] + + search_paths = RootModel[list[DirectoryPath]].model_validate(search_paths).root for search_path in search_paths: for match in search_path.glob(pattern): if match.is_dir() and (match / "data.csv").exists(): + logger.debug(f"Found dataset directory at '{match}'.") year, institution, subsite = match.name.split("-", maxsplit=2) yield LyDataset( year=year, institution=institution, subsite=subsite, + local_dataset_dir=search_path, + repo_name=None, + ref=None, ) -def _safely_fetch_repo(gh: Github, repo_name: str) -> Repository: - """Fetch a GitHub repository, handling common errors.""" - try: - repo = gh.get_repo(repo_name) - except UnknownObjectException as e: - raise ValueError(f"Could not find repository '{repo_name}' on GitHub.") from e - except BadCredentialsException as e: - raise ValueError("Invalid GitHub credentials.") from e - - return repo - - -def _safely_fetch_contents(repo: Repository, ref: str) -> list[ContentFile]: - """Fetch contents of a GitHub ``repo`` at a specific ``ref``, handling errors.""" - try: - contents = repo.get_contents(path="", ref=ref) - except GithubException as e: - available_branches = [b.name for b in repo.get_branches()] - available_tags = [t.name for t in repo.get_tags()] - raise ValueError( - f"Could not find ref '{ref}' in repository '{repo.full_name}'.\n" - f"Available branches: {available_branches}.\n" - f"Available tags: {available_tags}." - ) from e - - return contents - - def _available_datasets_on_github( year: int | str = "*", institution: str = "*", From 371970f8db70e35889aae86eb068faabc056a3e4 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 27 Aug 2025 11:05:59 +0200 Subject: [PATCH 72/78] feat: add `location` to short column access --- src/lydata/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lydata/utils.py b/src/lydata/utils.py index e06e3c0..9e8ef95 100644 --- a/src/lydata/utils.py +++ b/src/lydata/utils.py @@ -169,6 +169,7 @@ def get_default_column_map_old() -> _ColumnMap: _ColumnSpec("m_stage", ("patient", "#", "m_stage")), _ColumnSpec("midext", ("tumor", "1", "extension")), _ColumnSpec("subsite", ("tumor", "1", "subsite")), + _ColumnSpec("location", ("tumor", "1", "location")), _ColumnSpec("volume", ("tumor", "1", "volume")), _ColumnSpec("central", ("tumor", "1", "central")), _ColumnSpec("side", ("tumor", "1", "side")), From 0c82338ecd2d1802b4d7db5685694bd8ff660298 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:24:23 +0200 Subject: [PATCH 73/78] fix: get github fetch working again --- src/lydata/loader.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lydata/loader.py b/src/lydata/loader.py index 6f607b8..5a436bb 100644 --- a/src/lydata/loader.py +++ b/src/lydata/loader.py @@ -64,11 +64,15 @@ def _safely_fetch_repo(gh: Github, repo_name: str) -> Repository: return repo -def _safely_fetch_contents(repo: Repository, ref: str) -> list[ContentFile]: +def _safely_fetch_contents( + repo: Repository, + ref: str, + path: str = ".", +) -> list[ContentFile] | ContentFile: """Fetch contents of a GitHub ``repo`` at a specific ``ref``, handling errors.""" try: logger.debug(f"Fetching contents of repo '{repo.full_name}' at ref '{ref}'...") - contents = repo.get_contents(path="", ref=ref) + contents = repo.get_contents(path=path, ref=ref) except GithubException as e: available_branches = [b.name for b in repo.get_branches()] available_tags = [t.name for t in repo.get_tags()] @@ -190,7 +194,11 @@ def get_content_file( return self._content_file repo = self.get_repo(token=token, user=user, password=password) - self._content_file = _safely_fetch_contents(repo=repo, ref=self.ref) + self._content_file = _safely_fetch_contents( + repo=repo, + path=f"{self.name}/data.csv", + ref=self.ref, + ) return self._content_file def get_dataframe( From 5cc6a22720478a7337fbe972319606bca2e3db57 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:55:06 +0200 Subject: [PATCH 74/78] test: ensure .env is loaded during all tests --- conftest.py | 5 +++++ pyproject.toml | 1 + tests/test_installation.py | 10 ++++++++++ uv.lock | 11 +++++++++++ 4 files changed, 27 insertions(+) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..69dea87 --- /dev/null +++ b/conftest.py @@ -0,0 +1,5 @@ +"""Pytest configuration and fixtures for lydata tests.""" + +from dotenv import load_dotenv + +load_dotenv() diff --git a/pyproject.toml b/pyproject.toml index 7d38443..6a58096 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ docs = [ tests = [ "pytest", "pytest-cov", + "python-dotenv>=1.1.1", ] dev = [ "pre-commit", diff --git a/tests/test_installation.py b/tests/test_installation.py index d31192b..c776b73 100644 --- a/tests/test_installation.py +++ b/tests/test_installation.py @@ -1,6 +1,16 @@ """Simply ensure `lydata` is installed and pytest can proceed with doctests.""" +import os + + +def test_env_vars() -> None: + """Check that the .env file is loaded and the Github token is accessible.""" + token_env_var: str = os.environ.get("GITHUB_TOKEN", "nope") + assert "github" in token_env_var, "GITHUB_TOKEN env var not accessible" + + def test_is_installed() -> None: """Check that `lydata` can be imported (and is therefore installed).""" import lydata # noqa: F401 + assert True, "lydata is not installed or cannot be imported." # noqa: S101 diff --git a/uv.lock b/uv.lock index 043f445..74ffcc5 100644 --- a/uv.lock +++ b/uv.lock @@ -492,6 +492,7 @@ docs = [ tests = [ { name = "pytest" }, { name = "pytest-cov" }, + { name = "python-dotenv" }, ] [package.metadata] @@ -508,6 +509,7 @@ requires-dist = [ { name = "pygithub" }, { name = "pytest", marker = "extra == 'tests'" }, { name = "pytest-cov", marker = "extra == 'tests'" }, + { name = "python-dotenv", marker = "extra == 'tests'", specifier = ">=1.1.1" }, { name = "roman" }, { name = "sphinx", marker = "extra == 'docs'" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, @@ -1126,6 +1128,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] +[[package]] +name = "python-dotenv" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556 }, +] + [[package]] name = "pytz" version = "2025.2" From 26414d062e3c6181db0614b56f1346a0bc2bcca5 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:06:47 +0200 Subject: [PATCH 75/78] chore: update changelog --- CHANGELOG.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b3947a..036d024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,85 @@ All notable changes to this project will be documented in this file. +## [0.4.0] - 2025-09-04 + +### 🚀 Features + +- Allow custom functions via `.pass_to()` of `C` objects +- Allow importing `LyDataFrame` type from root +- Add working sorting functions for `LyDataFrame` +- Add convenience `.ly.enhance()` method +- Add pydantic patient/tumor model +- Add schema for modalities +- Add working dtype casting function +- Add `.ly.cast()` to lydata accessor +- Add function to write JSON schema to file +- Add pre-/suffixes to T/N stages in schema +- Casting, validating, & enhancing during load +- Add a `.get_tnm()` helper method +- Fail more informatively when loading. Fixes [#10]. +- Add `.ly.location` to short column access + +### 🐛 Bug Fixes + +- [**breaking**] Combine mods & lvl info using probabilities over likelihoods +- Use spec/sens < 1 in `augment` +- Make `LyDataFrame` importable +- Ensure alignment of columns during combine/augment +- Change mid-level column from `info` to `core` +- Don't override superlevel when sublevels unknown +- Join using "outer" in `.ly.enhance()` +- Avoid `None`s due to index mismatch etc. +- Replace instead of udpdate augmented columns +- Augment during combine for max_llh/rank +- Use default subdivisions in `.ly.enhance()` +- Make casting safer and better +- Avoid pydantic's weird `TypeError` for `pd.NaT` +- Check central info in schema +- Call `logger.error` over `exception` +- Allow MX=-1 in schema +- Allow `None` in more patient fields +- Side may be `None` when central=`True` +- Make some fields robust to uppercase strings +- Allow loading from disk using custom paths +- Get github fetch working again + +### 💼 Other + +- Don't use `or` to check for `None` arg +- [**breaking**] remove old functions to infer/combine data +- Move `C` & `Q` to own module +- [**breaking**] Update schema for new 2nd lvl cols +- Improve final sorting of tables +- [**breaking**] Rewrite validation using new schema +- [**breaking**] Start using only pydantic schema for validation +- Update mid-level cols to new `core` +- Remove typer dependency + +### 📚 Documentation + +- Add more info to augment/combine +- Update some docstrings +- Add docstrings to JS code +- Update schema & validation docstrings +- Add new modules to sphinx + +### 🧪 Testing + +- Test new combine/augment with CLB patient 17 +- Add basic `.ly.combine()` test +- Add scripts to compare augment/combine +- Check one patient with specific issue +- Add util doctest (though unnecessary) +- Add some more patient-specific checks +- Ensure basic functionality of schemas +- Cover casting with minimal checks +- Update schema test to use `core`, too +- Add another 2025-USZ patient to test cases +- Fix small issues causing tests to fail +- Update to new, cast data +- Ensure .env is loaded during all tests + ## [0.3.3] - 2025-07-22 ### 🚀 Features @@ -301,6 +380,9 @@ Initial implementation of the lyDATA library. +[0.4.0]: https://github.com/lycosystem/lydata-package/compare/0.3.3..0.4.0 +[0.3.3]: https://github.com/lycosystem/lydata-package/compare/0.3.2..0.3.3 +[0.3.2]: https://github.com/lycosystem/lydata-package/compare/0.3.1..0.3.2 [0.3.1]: https://github.com/lycosystem/lydata-package/compare/0.3.0..0.3.1 [0.3.0]: https://github.com/lycosystem/lydata-package/compare/8ae13..0.3.0 [0.2.5]: https://github.com/lycosystem/lydata/compare/0.2.4..0.2.5 @@ -321,3 +403,4 @@ Initial implementation of the lyDATA library. [#4]: https://github.com/lycosystem/lydata/issues/4 [#13]: https://github.com/lycosystem/lydata/issues/13 [#5]: https://github.com/lycosystem/lydata-package/issues/5 +[#10]: https://github.com/lycosystem/lydata-package/issues/10 From 53bb4ad89e7341c805e452f3e1d33f7ac5ab48fd Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:07:33 +0200 Subject: [PATCH 76/78] chore: remove old vs new scripts --- scripts/.gitignore | 2 - scripts/Makefile | 24 ----- scripts/README.md | 31 ------ scripts/compare.py | 58 ----------- scripts/new.pretty.csv | 220 ----------------------------------------- scripts/new.py | 38 ------- scripts/old.pretty.csv | 220 ----------------------------------------- scripts/old.py | 37 ------- 8 files changed, 630 deletions(-) delete mode 100644 scripts/.gitignore delete mode 100644 scripts/Makefile delete mode 100644 scripts/README.md delete mode 100644 scripts/compare.py delete mode 100644 scripts/new.pretty.csv delete mode 100644 scripts/new.py delete mode 100644 scripts/old.pretty.csv delete mode 100644 scripts/old.py diff --git a/scripts/.gitignore b/scripts/.gitignore deleted file mode 100644 index 038359c..0000000 --- a/scripts/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.csv -!*.pretty.csv diff --git a/scripts/Makefile b/scripts/Makefile deleted file mode 100644 index 2f2783d..0000000 --- a/scripts/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -.PHONY: all old new compare pretty-table-old pretty-table-new - -all: old.csv new.csv compare pretty-table-old pretty-table-new - -old.csv: old.py - uv run old.py - -new.csv: new.py - uv run new.py - -compare: old.csv new.csv - uv run compare.py old.csv new.csv - -old.diff.csv new.diff.csv: compare - @true # compare.py is assumed to produce both diff files - -pretty-table-old: old.diff.csv - uvx tabulate -f "simple" -s "," old.diff.csv > old.pretty.csv - -pretty-table-new: new.diff.csv - uvx tabulate -f "simple" -s "," new.diff.csv > new.pretty.csv - -clean: - rm -f old.csv new.csv old.diff.csv new.diff.csv old.pretty.csv new.pretty.csv diff --git a/scripts/README.md b/scripts/README.md deleted file mode 100644 index e800164..0000000 --- a/scripts/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Upgrade from lydata 0.3.3 to 0.4.0 - -Since we noticed [an issue with how the data is combined], a new version is in the works. To double check that now - finally - everything is working as expected, we need to compare the old and new data. - -## Reproduce Comparison Files - -This `scripts` directory contains the `new.py` and `old.py` scripts, which fetch the exact same data from the lyDATA repo, but once use the old version and once the new dev version. - -> [!IMPORTANT] -> To run these scripts, you need to have [`uv`] installed, because - as far as I know - only this tool allows automatically installing the required dependencies from the [inline script metadata] and puts them in a temporary virtual environment. - -Simply run the following command in the `scripts` directory: - -```bash -make all -``` - -## Looking at the Differences - -Now, you can compare the `old.pretty.csv` and `new.pretty.csv` files. This is best done e.g. inside VS Code: - -1. Open `old.pretty.csv` -2. Press `Ctrl + Shift + P` to open the command palette -3. Type `Compare Active File With...` and select it -4. Select `new.pretty.csv` from the list - -Now you have the old file on the left and the new file on the right. Any changes are highlighted and allow for a relatively easy comparison. - -[an issue with how the data is combined]: https://github.com/lycosystem/lydata-package/issues/7 -[`uv`]: https://docs.astral.sh/uv/ -[inline script metadata]: https://packaging.python.org/en/latest/specifications/inline-script-metadata/#inline-script-metadata diff --git a/scripts/compare.py b/scripts/compare.py deleted file mode 100644 index 5eb5a6b..0000000 --- a/scripts/compare.py +++ /dev/null @@ -1,58 +0,0 @@ -# /// script -# requires-python = ">=3.10" -# dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@01a62ec12d504365bfd51302526cccc371bfd0ce", -# "typer", -# ] -# /// - -"""Compare new and old datasets for differences.""" - -from pathlib import Path - -import pandas as pd -from loguru import logger - -from lydata.utils import _sort_all - - -def main(old_file: Path, new_file: Path) -> None: - """Compare old and new datasets.""" - old = pd.read_csv(old_file, header=[0, 1, 2]) - logger.info(f"Loading old dataset from {old_file}") - new = pd.read_csv(new_file, header=[0, 1, 2]) - logger.info(f"Loading new dataset from {new_file}") - - old, new = old.align(new, axis="columns", join="outer") - is_equal = (old == new) | (old.isna() & new.isna()) - logger.info(f"Num of different cells (total): {(~is_equal).sum().sum()}") - is_equal = (old.max_llh == new.max_llh) | (old.max_llh.isna() & new.max_llh.isna()) - logger.info(f"Num of different cells (max_llh): {(~is_equal).sum().sum()}") - - old = _sort_all(old) - new = _sort_all(new) - - old_diff, new_diff = [], [] - - for (_, old_row), (_, new_row) in zip(old.iterrows(), new.iterrows(), strict=True): - is_equal = (old_row == new_row) | (old_row.isna() & new_row.isna()) - if not is_equal.all(): - old_diff.append(old_row) - new_diff.append(new_row) - - old_diff = pd.DataFrame(old_diff, columns=old.columns) - new_diff = pd.DataFrame(new_diff, columns=new.columns) - - old_file = old_file.with_suffix(".diff.csv") - new_file = new_file.with_suffix(".diff.csv") - - old_diff.to_csv(old_file, index=False) - logger.success(f"Saving {old_diff.shape=} diff to {old_file}") - new_diff.to_csv(new_file, index=False) - logger.success(f"Saving {new_diff.shape=} diff to {new_file}") - - -if __name__ == "__main__": - import typer - - typer.run(main) diff --git a/scripts/new.pretty.csv b/scripts/new.pretty.csv deleted file mode 100644 index d52e52c..0000000 --- a/scripts/new.pretty.csv +++ /dev/null @@ -1,220 +0,0 @@ ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- -patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives -# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi -id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI -P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 -P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 -P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 -P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 -P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 -P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 -P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 -P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 -P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 -P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 -P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 -P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 -P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 -P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 -P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 -P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 -P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 -P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 -P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 -P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 -P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 -P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 -P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 -P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 -P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 -P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 -P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False True False False False False False False True False False True False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 -P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 -P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 -P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 -P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 -P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 -P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 -P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 -P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 -P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 -P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 -P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 -P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 -P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 -P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 -P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True True False True True True False True False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 -P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 -P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 -8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True -12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True -21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False -29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 -33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False -61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False -89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False False False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False -132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True -154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False -157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False -278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False -CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 -CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 -CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 -CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 -CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 -CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 -CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 -CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 -CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 -CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 -CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 -CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 -CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 -CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 -CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 -CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 -CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 -CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 -CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 -CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 -CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 -CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 -CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 -CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 -CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 -CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 -CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 -CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 -CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 -CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 -CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 -CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 -CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 -CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 -CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 -CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 -CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 -CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 -CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 -CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 -CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 -CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 -CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 -CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 -CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 -CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 -CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 -CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 -CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 -CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 -CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 -CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 -CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 -CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 -CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 -CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 -CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 -CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 -CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 -CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 -CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 -CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 -CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 -CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 -CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 -CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 -CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 -CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 -CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 -CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 -CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 -CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 -CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 -CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 -CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 -CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 -CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 -CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 -CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 -CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 -CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 -CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False False True True False False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 -CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False False True False False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 -CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 -CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 -CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 -CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 -CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 -CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 -CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 -CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 -CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 -CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 -CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 -CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 -CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 -CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 -CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 -CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 -CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 -CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 -CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 -CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 -CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 -CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 -CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 -CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 -CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 -CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 -CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 -CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 -CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 -CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 -CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 -CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 -CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 -BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 -BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 -BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 -BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 -BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 -BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 -BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 -BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 -BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 -BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 -62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False -75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True -117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False True True False True False True True 2015-02-26 False False False True True False True False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False -123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False -134 72 False 2019-11-26 False Vall d'Hebron Barcelona Hospital 1 3 False True female 8 True True oropharynx C C01.9 4 52.0 False False False True True False False False True True False False False False False True True True True False True True False True False False False False False False False False False False False False 2019-12-18 False False False True True True True False True True False True False False False True True False False False True True False False 2019-12-27 True False True True True True True False True True False True -157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False -UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 -UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True True False True False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 -UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 -UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 -UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 -UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 -UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 -UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 -UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 -UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 -UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 -UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 -UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 -UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 -UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 -USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False -USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False -USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False False False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False -USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False False False False True False False False False False False False False False True True False True False True False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False -USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 False False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False -USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False -USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False -USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False -USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False -USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False -USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 -USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False -USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- diff --git a/scripts/new.py b/scripts/new.py deleted file mode 100644 index 20a32af..0000000 --- a/scripts/new.py +++ /dev/null @@ -1,38 +0,0 @@ -# /// script -# requires-python = ">=3.10" -# dependencies = [ -# "lydata @ git+https://github.com/lycosystem/lydata-package@66d21299ca5cf6aca1906f7525638b59457aea3e", -# ] -# /// - -"""Get all datasets and enhance them using the new lydata package.""" - -import pandas as pd -from loguru import logger - -import lydata -from lydata.accessor import LyDataFrame - -logger.enable("lydata") - - -def main() -> None: - """Run the main function to load and enhance datasets.""" - full_dataset: LyDataFrame = pd.DataFrame() - for dataset in lydata.load_datasets( - repo_name="lycosystem/lydata.private", - ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", - ): - full_dataset = pd.concat([full_dataset, dataset], ignore_index=True) - logger.info(f"Added {len(dataset)=} rows to the full dataset.") - - enhanced_dataset = full_dataset.ly.enhance() - added_cols = enhanced_dataset.shape[1] - full_dataset.shape[1] - logger.info(f"Enhanced dataset has {added_cols} new columns.") - - enhanced_dataset.to_csv("new.csv", index=False) - logger.success("Enhanced dataset saved to 'new.csv'.") - - -if __name__ == "__main__": - main() diff --git a/scripts/old.pretty.csv b/scripts/old.pretty.csv deleted file mode 100644 index 65873f5..0000000 --- a/scripts/old.pretty.csv +++ /dev/null @@ -1,220 +0,0 @@ ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- -patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient patient tumor tumor tumor tumor tumor tumor tumor tumor tumor max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh max_llh CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT CT FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA FNA MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET PET diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus diagnostic_consensus enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_dissected enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive enbloc_positive extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular extracapsular pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pCT pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology pathology positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected positive_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_dissected total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives total_positives -# # # # # # # # # # # # # # # follow_up follow_up follow_up recurrence recurrence recurrence recurrence recurrence recurrence 1 1 1 1 1 1 1 1 1 contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra contra contra contra contra contra contra contra contra info info ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi ipsi contra contra contra contra contra contra info ipsi ipsi ipsi ipsi ipsi ipsi -id age alcohol_abuse diagnose_date extracapsular hpv_status institution m_stage n_stage neck_dissection nicotine_abuse pack_years sex tnm_edition weight cause_of_death date death distant distant_date local local_date regional regional_date side dist_mid central extension location stage_prefix subsite t_stage volume I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb Ia Ib IIa IIb III IV Va Vb I II III IV V VI date I II III IV V VI I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X date I Ia Ib II IIa IIb III IV V Va Vb VI VII VIII IX X I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date largest_node_lnl largest_node_mm I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all all_lnls date I Ia Ib Ib_to_III II IIa IIb III IV V Va Vb VII all I II III IV V VI date I II III IV V VI -P014 43 True 2013-04-26 True Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C10.0 3 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2013-04-26 False False False True False False False False False False False False False True False False 2013-04-26 False False False True False False 0.0 0.0 1.0 0.0 0.0 1.0 2013-04-26 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 9.0 1.0 4.0 14.0 2013-04-26 0.0 0.0 6.0 3.0 4.0 13.0 -P015 59 True 2018-02-01 False Centre Léon Bérard 0 1 True True male 8 False 0.0 oropharynx c C05.1 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-01 False False False False False False False False False False False False False False False False False 2018-02-01 True False False 0.0 0.0 0.0 0.0 2018-02-01 1.0 0.0 0.0 1.0 6.0 9.0 12.0 27.0 2018-02-01 6.0 17.0 11.0 44.0 -P034 60 True 2016-11-02 False Centre Léon Bérard 0 2 True True 20.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-11-02 False False False False False False False False False False False False 2016-11-02 True False False 2016-11-02 1.0 0.0 0.0 1.0 2016-11-02 14.0 1.0 1.0 16.0 -P035 55 True 2014-10-13 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False 2014-10-13 True False True True True False False False False False 2014-10-13 False False False False True False 2014-10-13 0.0 0.0 1.0 0.0 1.0 2014-10-13 2.0 9.0 6.0 6.0 23.0 -P040 42 True 2013-08-26 False Centre Léon Bérard 0 2 True True 20.0 male 8 1.0 oropharynx c C10.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False True False False False False False 2013-08-26 False False False False False False False False False False False False False False False False False False 2013-08-26 False False False True True False 0.0 0.0 0.0 0.0 0.0 2013-08-26 0.0 0.0 1.0 2.0 0.0 3.0 2.0 5.0 16.0 6.0 29.0 2013-08-26 2.0 3.0 11.0 6.0 0.0 22.0 -P041 51 False 2018-02-02 False Centre Léon Bérard 0 2 True True 35.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False True False True True False False False False False False False False False False False False False False False False False False False 2018-02-02 False False False False False False False False False False False False 2018-02-02 True True True False False 2018-02-02 1.0 3.0 0.0 0.0 4.0 2018-02-02 5.0 24.0 6.0 10.0 45.0 -P042 76 False 2016-12-02 False Centre Léon Bérard 0 3 True True 60.0 male 8 1.0 oropharynx c C10.0 2 False False False False False False True False False False False False False False True False False True True False False False False False False False False False False False False False False False 2016-12-02 False False False False False False False False False False False False False False False True False 2016-12-02 False True True True 0.0 1.0 0.0 1.0 2016-12-02 0.0 3.0 7.0 5.0 15.0 15.0 4.0 3.0 22.0 2016-12-02 2.0 11.0 11.0 6.0 30.0 -P060 59 False 2014-02-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.9 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-10 False False False False False False False False False False False False 2014-02-10 True False False 2014-02-10 1.0 0.0 0.0 1.0 2014-02-10 17.0 2.0 2.0 21.0 -P078 54 True 2018-10-04 False Centre Léon Bérard 0 3 True True 10.0 male 8 1.0 oropharynx c C10.0 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2018-10-04 False False False True False False False False False False True False False 2018-10-04 False False False True False False 1.0 0.0 0.0 1.0 2018-10-04 0.0 0.0 1.0 0.0 0.0 1.0 27.0 14.0 12.0 63.0 2018-10-04 0.0 2.0 15.0 10.0 3.0 30.0 -P083 50 True 2019-01-17 False Centre Léon Bérard 0 3 True True 35.0 male 8 False 0.0 oropharynx c C09.0 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False 2019-01-17 False False False True False False False False False False True False False 2019-01-17 False True True True 1.0 0.0 0.0 1.0 2019-01-17 0.0 9.0 1.0 1.0 11.0 16.0 9.0 9.0 34.0 2019-01-17 3.0 15.0 6.0 9.0 33.0 -P096 67 True 2013-10-18 True Centre Léon Bérard 0 1 True True 10.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-10-18 False False False False False False False False False False False False 2013-10-18 False True False False False False False 2013-10-18 0.0 1.0 0.0 0.0 0.0 1.0 2013-10-18 0.0 9.0 6.0 4.0 0.0 19.0 -P097 63 False 2019-02-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False True False False True False False False False True False False False False False False False False False False False False False False 2019-02-15 True False True False False False False False False False False False 2019-02-15 False True False False True 2019-02-15 0.0 1.0 0.0 0.0 1.0 2.0 2019-02-15 2.0 4.0 12.0 6.0 6.0 30.0 -P098 69 False 2017-12-22 False Centre Léon Bérard 0 3 True True 60.0 male 8 False 0.0 oropharynx c C09.8 4 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2017-12-22 False False False True False False False False False False False False False False False False False False False 2017-12-22 False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-12-22 0.0 0.0 0.0 0.0 3.0 3.0 0.0 1.0 1.0 0.0 13.0 15.0 2017-12-22 0.0 5.0 2.0 0.0 5.0 13.0 -P100 63 True 2017-04-12 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C05.1 2 False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False 2017-04-12 False False False True False False False False False False False True False False False False False 2017-04-12 False True False False False False False 0.0 2.0 0.0 0.0 0.0 2.0 2017-04-12 0.0 2.0 0.0 0.0 0.0 2.0 0.0 9.0 7.0 2.0 13.0 31.0 2017-04-12 0.0 15.0 6.0 5.0 7.0 33.0 -P128 60 True 2016-03-23 False Centre Léon Bérard 0 1 True True female 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-03-23 False False False False False False False False False False False False 2016-03-23 False True False False False False False 2016-03-23 0.0 1.0 0.0 0.0 0.0 1.0 2016-03-23 3.0 2.0 7.0 7.0 3.0 22.0 -P131 63 False 2017-07-15 True Centre Léon Bérard 0 2 True True 30.0 female 8 False 0.0 oropharynx c C09.8 3 False False False True False False False False False False False False False False True True False False False False False False False False False False False False False False False False 2017-07-15 False False False True False True False False False False True False False False False False 2017-07-15 False True True False False False False 1.0 0.0 0.0 0.0 1.0 2017-07-15 0.0 3.0 4.0 0.0 0.0 7.0 17.0 2.0 0.0 0.0 19.0 2017-07-15 3.0 7.0 10.0 3.0 0.0 23.0 -P133 55 True 2016-10-18 False Centre Léon Bérard 0 1 True True 80.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-10-18 False False False False False False False False False False False False 2016-10-18 False False False True False False False False False 2016-10-18 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2016-10-18 0.0 6.0 11.0 8.0 14.0 0.0 39.0 -P134 62 True 2015-04-03 False Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2015-04-03 False False False False False False False False False False False False 2015-04-03 False False False False False True 2015-04-03 0.0 0.0 0.0 1.0 1.0 2015-04-03 2.0 1.0 2.0 5.0 10.0 -P145 52 False 2018-02-19 True Centre Léon Bérard 0 1 True True 25.0 male 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-02-19 False False False False False False False False False False False False 2018-02-19 True False False 2018-02-19 2.0 0.0 0.0 2.0 2018-02-19 5.0 11.0 4.0 20.0 -P154 51 False 2014-08-26 False Centre Léon Bérard 0 1 True True 30.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-08-26 False False False False False False False False False False False False 2014-08-26 False False False True False False False False False 2014-08-26 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2014-08-26 2.0 4.0 10.0 16.0 10.0 0.0 42.0 -P159 63 False 2018-06-20 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C10.2 2 False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False 2018-06-20 False False False False False False False True False False False False False False False False 2018-06-20 False False False False False True 0.0 0.0 0.0 2018-06-20 0.0 0.0 0.0 1.0 1.0 1.0 1.0 2.0 2018-06-20 17.0 2.0 0.0 22.0 41.0 -P165 60 False 2016-10-26 True Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2016-10-26 False False False False False False False False False False False False False False False False False False 2016-10-26 False False False True True False 0.0 0.0 0.0 0.0 2016-10-26 0.0 0.0 1.0 1.0 0.0 2.0 3.0 11.0 6.0 8.0 2016-10-26 0.0 3.0 6.0 4.0 2.0 15.0 -P169 54 True 2016-09-03 False Centre Léon Bérard 0 2 True True male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False False False False False False False False False False False False False False False False False False 2016-09-03 False False False True False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-09-03 0.0 0.0 1.0 0.0 0.0 1.0 4.0 2.0 7.0 9.0 6.0 28.0 2016-09-03 0.0 2.0 6.0 5.0 3.0 16.0 -P177 67 False 2014-02-21 True Centre Léon Bérard 0 1 True True 70.0 male 8 False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2014-02-21 False False False False False False False False False False False False 2014-02-21 True True False 2014-02-21 2.0 1.0 0.0 3.0 2014-02-21 9.0 9.0 2.0 20.0 -P188 61 True 2014-07-11 False Centre Léon Bérard 0 2 True True 40.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-11 False False False False False False False False False False False False False False False False False 2014-07-11 False False False True False False 0.0 0.0 0.0 0.0 2014-07-11 0.0 0.0 1.0 0.0 0.0 1.0 12.0 11.0 2.0 25.0 2014-07-11 4.0 7.0 14.0 13.0 2.0 40.0 -P195 62 True 2015-03-09 False Centre Léon Bérard 0 1 True True 45.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2015-03-09 False False False False False False False False False False False False 2015-03-09 False False False True False False False False False 2015-03-09 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2015-03-09 1.0 0.0 9.0 3.0 5.0 6.0 24.0 -P203 63 False 2017-03-27 False Centre Léon Bérard 0 3 True True 70.0 male 8 1.0 oropharynx c C10.0 3 False False False True False False False True False False False False False False True False False True False False False False False False False False False False False False False False 2017-03-27 False False False True True False False False False False True False True False False False 2017-03-27 True False False True 1.0 0.0 1.0 0.0 2.0 2017-03-27 1.0 0.0 0.0 1.0 4.0 5.0 2.0 7.0 14.0 28.0 2017-03-27 15.0 1.0 9.0 18.0 44.0 -P211 51 False 2018-07-05 True Centre Léon Bérard 0 1 True False 0.0 male 8 1.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2018-07-05 False False False False False False False False False False False False 2018-07-05 False False False True False False False False False 2018-07-05 0.0 0.0 2.0 0.0 0.0 0.0 2.0 2018-07-05 1.0 5.0 13.0 1.0 3.0 8.0 31.0 -P212 68 True 2018-11-21 False Centre Léon Bérard 0 3 True True 50.0 male 8 False 0.0 oropharynx c C10.2 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2018-11-21 False False False False False False False False False False False False 2018-11-21 True True False False False False 2018-11-21 1.0 1.0 0.0 0.0 2.0 2018-11-21 6.0 3.0 1.0 6.0 16.0 -P214 59 True 2019-01-28 False Centre Léon Bérard 0 3 True True 30.0 male 8 False 0.0 oropharynx c C09.8 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False 2019-01-28 False False False False False False False False False False False False 2019-01-28 False False False True True False 2019-01-28 0.0 0.0 1.0 1.0 0.0 2.0 2019-01-28 2.0 5.0 7.0 9.0 8.0 31.0 -P215 67 True 2014-07-15 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2014-07-15 False False False False False False False False False False False False 2014-07-15 False False False True False False 2014-07-15 0.0 0.0 1.0 0.0 0.0 1.0 2014-07-15 3.0 5.0 10.0 17.0 5.0 40.0 -P220 53 False 2013-12-30 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False True False True True True True True False False False False False False False False False False False False False False 2013-12-30 False False False True True False False False False False 2013-12-30 True True True True True True 2013-12-30 1.0 5.0 4.0 2.0 5.0 17.0 2013-12-30 1.0 5.0 5.0 5.0 11.0 27.0 -P247 61 False 2016-09-02 True Centre Léon Bérard 0 2 True False 0.0 female 8 False 0.0 oropharynx c C01 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-09-02 False False False True False False False False False False 2016-09-02 False False False True False False True 2016-09-02 0.0 0.0 7.0 0.0 0.0 1.0 8.0 2016-09-02 0.0 3.0 15.0 9.0 10.0 15.0 49.0 -P250 49 False 2018-03-29 True Centre Léon Bérard 0 1 True True 40.0 male 8 False 0.0 oropharynx c C09.8 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-03-29 False False False True False False False False False False 2018-03-29 False True False False True 2018-03-29 0.0 1.0 0.0 0.0 1.0 3.0 2018-03-29 0.0 10.0 7.0 4.0 12.0 33.0 -P264 57 False 2016-10-10 True Centre Léon Bérard 0 1 True False 0.0 male 8 False 0.0 oropharynx c C09.8 1 False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False 2016-10-10 True False True True False False False False False False 2016-10-10 False True False False 2016-10-10 0.0 1.0 0.0 0.0 1.0 2016-10-10 3.0 2.0 4.0 4.0 13.0 -P269 56 False 2016-07-28 False Centre Léon Bérard 0 3 True True 40.0 male 8 False 0.0 oropharynx c C09.0 2 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-07-28 False False False True False False False False False False 2016-07-28 True False False True 2016-07-28 1.0 0.0 0.0 1.0 2.0 2016-07-28 6.0 3.0 1.0 3.0 13.0 -P272 65 True 2016-06-12 False Centre Léon Bérard 0 2 True True 45.0 male 8 1.0 oropharynx c C01 3 False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False 2016-06-12 False False False False False False False False False False False False False False False False False False False False 2016-06-12 False False False True False True False False False 0.0 0.0 0.0 0.0 0.0 2016-06-12 0.0 0.0 4.0 0.0 1.0 0.0 5.0 5.0 2.0 2.0 3.0 12.0 2016-06-12 3.0 4.0 8.0 1.0 2.0 2.0 20.0 -P283 69 False 2017-02-01 True Centre Léon Bérard 0 1 True True 75.0 male 8 1.0 oropharynx c C09.9 2 False False False False False False False False False False False True False False True False False False False False False False True False False False False False False False False False False False 2017-02-01 True False True False False False False False False False False True 2017-02-01 False True False False 2017-02-01 0.0 2.0 0.0 0.0 2.0 2017-02-01 2.0 5.0 8.0 3.0 18.0 -P286 68 False 2016-12-19 True Centre Léon Bérard 0 1 True False 0.0 female 8 False 0.0 oropharynx c C09.0 3 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2016-12-19 False False False True False False False False False False 2016-12-19 False False False True False False True 2016-12-19 0.0 0.0 4.0 0.0 0.0 1.0 5.0 2016-12-19 1.0 4.0 9.0 10.0 4.0 11.0 39.0 -P287 56 True 2017-06-26 False Centre Léon Bérard 0 2 True True 40.0 male 8 False 0.0 oropharynx c C01 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2017-06-26 False False False False False False False False False False False False 2017-06-26 False False False True False False False False False 2017-06-26 0.0 0.0 3.0 0.0 0.0 0.0 3.0 2017-06-26 4.0 6.0 7.0 0.0 5.0 9.0 31.0 -P292 60 False 2017-06-07 True Centre Léon Bérard 0 2 True False 0.0 male 8 False 0.0 oropharynx c C01 3 False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2017-06-07 True False True True True False False False False False 2017-06-07 False True True False 2017-06-07 0.0 3.0 4.0 0.0 7.0 2017-06-07 9.0 5.0 8.0 3.0 25.0 -P301 61 True 2017-03-10 False Centre Léon Bérard 0 3 True True 30.0 male 8 1.0 oropharynx c C10.0 4 False False False True False False True False False True False True True True False True False False False False False False True False False False False False 2017-03-10 False False False True False False False False False False False True False False True 2017-03-10 True True True True False True 0.0 3.0 0.0 0.0 1.0 4.0 2017-03-10 2.0 4.0 2.0 0.0 3.0 11.0 1.0 12.0 1.0 8.0 18.0 40.0 2017-03-10 2.0 11.0 11.0 6.0 11.0 41.0 -P311 71 True 2018-05-16 True Centre Léon Bérard 0 1 True True 10.0 male 8 1.0 oropharynx c C09.8 3 False False False True False False False False False False False False True True False True False False False False False False True False False False False False 2018-05-16 False False False True False False False False False False True False False False False False 2018-05-16 False False False True True False True 1.0 0.0 0.0 0.0 1.0 2018-05-16 0.0 0.0 1.0 1.0 0.0 1.0 3.0 10.0 4.0 8.0 5.0 27.0 2018-05-16 6.0 4.0 5.0 2.0 2.0 5.0 24.0 -P319 60 True 2018-05-28 True Centre Léon Bérard 0 2 True True 20.0 female 8 False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False 2018-05-28 False False False True True False False False False False 2018-05-28 False False False True False False True 2018-05-28 0.0 0.0 3.0 0.0 0.0 2.0 5.0 2018-05-28 1.0 9.0 11.0 7.0 7.0 11.0 46.0 -8 65 False 2018-07-15 True University Hospital Zurich 0 1 False True male 8 right False 0.0 oropharynx c C09.0 4 False False False False False False False False False False False False False False False True True False True True True False False True False False False False False False False False False False False False 2018-07-09 False False False True True False True True True True False False False False False False False False False False False False 2018-07-29 False False False True True False True True False False False True -12 56 False 2018-11-18 True University Hospital Zurich 0 2 True True male 8 left False 0.0 oropharynx p C09.0 1 False False False False False False False False False False False False False False False True True True True True True False False False False 2018-11-09 False False False False False False False False False False False False 2018-10-21 False False False True True True True True False False False False False False False False False False False False False False False False 2018-11-11 False False False True True True True False False False False False False False False False False False False False False False False False 2018-12-20 False False False False False False False False True False 2018-12-02 False False False True True True True -21 54 False 2013-11-16 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 1 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2013-11-13 False False False False False False False False False False False False 2013-11-22 False False False True True True True True False False False True False False False False False False False False False False False False 2013-11-07 False False False True True True True True True False False False False False False False False False False False False False 2013-12-11 False False False True True True True True True False -29 64 False 2014-02-19 True University Hospital Zurich 0 2 True False male 7 right False 0.0 oropharynx p C09.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-02-06 True False False False False False False False False False False False False 2014-02-13 False False False True True False False False False False False False False False False False False False False False False False False False 2014-04-07 False False False False False False False False False False False False 2014-03-11 -33 54 True 2014-05-01 False University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C09.9 2 False False False False False False False False False False False False False False False True True True True True True False False False False False False 2014-05-01 True False False False False False False False False False False False False False 2014-05-08 False False False True True True True True True False False False False False False False False False False False False False 2014-06-30 False False False True True True True False False False False False -61 56 False 2016-09-22 True University Hospital Zurich 0 2 False False female 7 right False 0.0 oropharynx c C09.9 3 False False False True True True True True True False False True True False True True True True False False True False False False False False 2016-09-25 True False False False True True True True True True True 2016-09-26 True False True True True True False False True False False False False True True True True True False False False True 2016-10-29 True False True True True True False False True False -89 78 False 2014-03-01 True University Hospital Zurich 0 1 False False male 7 left False 0.0 oropharynx p C10.9 1 False False False False False False False False False False False False False False False True False False False False False False False False 2014-03-01 True False False False False False False False False False False False False False 2014-03-13 False False False True False True False False False False False False False False False False False False False False False False False False 2014-02-12 False False False False False False False False False False False False False False False False False False False False False False False False 2014-04-10 False False False False False False False False False False False False -132 68 True 2017-07-30 False University Hospital Zurich 0 3 False True male 8 right False 1.0 oropharynx c C10.1 4 False False False True True True True False False False False True False False False True True True True True True False False True True 2017-07-30 True True True False False False True True True True False False False False True 2017-08-02 False False False True True True True True False False False True False False False True True True True False False False False True 2017-08-21 False False False True True True True True False False False True -154 58 True 2018-02-04 False University Hospital Zurich -1 2 False True male 8 left False 1.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True True True False False False 2018-02-14 True True False False False False False False False False False False False False 2018-02-11 False False False True True True True True True False False False False False False False False False False False False False 2018-07-12 False False False True True False True False False False False False -157 56 True 2014-04-21 True University Hospital Zurich 0 2 False True male 7 right False 1.0 oropharynx c C01.9 4 False False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False False False 2014-03-27 False False False True True True True True True False False 2014-04-21 True False False False False False False False False False False False False 2014-04-20 False False False True True True True True True False False False False False False False False False False False False False 2014-04-27 False False False True True True True False False False False False -278 76 True 2013-02-22 True University Hospital Zurich 0 2 False True male 7 right False 0.0 oropharynx c C10.9 4 False False False False False False False False False False False False False False False True True True True False True False False False 2013-02-22 True True True False False False False False False False False False False False False 2013-03-04 False False False True True True False False False False False False False False False False False False False False False False False False 2013-03-29 False False False True True True False False True False -CLB0002 52 True 2009-04-29 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-29 False False False False False False False False False 2009-04-29 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-29 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 19.0 12.0 3.0 7.0 14.0 2009-04-29 8.0 5.0 12.0 6.0 1.0 8.0 12.0 -CLB0005 41 False 2006-05-10 False Centre Léon Bérard -1 0 True True male 7 82.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2006-05-10 False False False False False False False False False 2006-05-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-05-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 6.0 0.0 6.0 7.0 2006-05-10 3.0 3.0 16.0 13.0 0.0 3.0 8.0 -CLB0006 67 False 2015-04-14 False False Centre Léon Bérard -1 0 True False male 8 79.0 p C03 1 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-04-14 False False False False False False False False False 2015-04-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-04-14 0.0 0.0 0.0 0.0 0.0 0.0 3.0 17.0 7.0 7.0 1.0 2015-04-14 3.0 5.0 19.0 8.0 6.0 3.0 -CLB0007 61 False 2014-02-18 False Centre Léon Bérard -1 0 True True female 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False 2014-02-18 False False False False False False False False False False False 2014-02-18 False False False False False 0.0 0.0 0.0 0.0 0.0 2014-02-18 0.0 0.0 0.0 0.0 2.0 29.0 10.0 17.0 4.0 2014-02-18 3.0 29.0 14.0 12.0 -CLB0008 77 True 2008-10-20 True Centre Léon Bérard -1 2 True True male 7 92.0 p C05 3 False False False False False False False False False False False False False True False False False False False False 2008-10-20 False False False False False False False False False 2008-10-20 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-10-20 0.0 0.0 1.0 1.0 0.0 0.0 0.0 8.0 21.0 9.0 4.0 4.0 8.0 2008-10-20 1.0 1.0 10.0 7.0 2.0 2.0 5.0 -CLB0009 55 False 2011-11-16 False Centre Léon Bérard -1 0 True True male 7 88.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False 2011-11-16 False False False False False False False False False 2011-11-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-11-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 12.0 4.0 1.0 5.0 2.0 2011-11-16 3.0 4.0 12.0 7.0 1.0 3.0 10.0 -CLB0011 49 True 2004-10-11 True False Centre Léon Bérard -1 3 True True male 8 83.0 p C09 2 False False False False False False False False False False False False True False False True False 2004-10-11 False False False False False False False False False False 2004-10-11 False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2004-10-11 0.0 4.0 4.0 0.0 0.0 2.0 1.0 13.0 12.0 0.0 2.0 11.0 2004-10-11 2.0 8.0 6.0 0.0 3.0 6.0 -CLB0015 59 True 2010-07-09 True Centre Léon Bérard -1 3 True True male 8 74.0 p C32 4 False False False False False False False False False False False False False True True False False False False False False False 2010-07-09 False False False False False False False False False 2010-07-09 False True True False False False False 0.0 0.0 0.0 0.0 2010-07-09 0.0 4.0 2.0 2.0 0.0 0.0 9.0 4.0 11.0 10.0 2010-07-09 4.0 20.0 8.0 8.0 4.0 3.0 -CLB0016 63 True 2012-07-15 True Centre Léon Bérard -1 2 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False True False False False False False False 2012-07-15 False False False False False False False False False 2012-07-15 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-15 0.0 0.0 2.0 2.0 0.0 0.0 0.0 5.0 12.0 6.0 1.0 3.0 6.0 2012-07-15 1.0 4.0 13.0 6.0 3.0 3.0 2.0 -CLB0017 44 True 2018-01-15 False Centre Léon Bérard -1 2 True True female 8 67.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2018-01-15 False False False False False False False False False 2018-01-15 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.0 25.0 16.0 2.0 10.0 16.0 2018-01-15 1.0 5.0 12.0 5.0 2.0 7.0 22.0 -CLB0019 48 True 2015-10-20 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-10-20 False False False False False False False False False 2015-10-20 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-10-20 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 3.0 7.0 6.0 2015-10-20 5.0 1.0 8.0 3.0 4.0 4.0 -CLB0020 64 True 2015-11-06 False Centre Léon Bérard -1 0 True True male 7 82.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-11-06 False False False False 2015-11-06 False False False False False False 2015-11-06 0.0 0.0 0.0 0.0 0.0 2015-11-06 10.0 17.0 6.0 1.0 2.0 -CLB0022 61 False 2010-05-01 True True Centre Léon Bérard -1 2 True False male 8 56.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2010-05-01 False False False False False False False False False 2010-05-01 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-01 0.0 0.0 2.0 2.0 0.0 0.0 0.0 1.0 5.0 2.0 2.0 2.0 12.0 2010-05-01 1.0 1.0 4.0 2.0 1.0 2.0 4.0 -CLB0023 48 True 2003-11-24 False Centre Léon Bérard -1 0 True True male 8 62.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2003-11-24 False False False False False False False False False False 2003-11-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2003-11-24 0.0 0.0 0.0 0.0 0.0 0.0 2.0 17.0 10.0 5.0 9.0 7.0 2003-11-24 3.0 9.0 3.0 3.0 2.0 7.0 -CLB0028 50 False 2009-02-23 False Centre Léon Bérard -1 1 True True male 7 77.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2009-02-23 False False False False False False False False False 2009-02-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-02-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 2.0 2.0 2009-02-23 6.0 2.0 13.0 9.0 2.0 4.0 3.0 -CLB0030 63 False 2013-06-20 False Centre Léon Bérard -1 0 True True male 7 74.0 p C06 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2013-06-20 False 2013-06-20 False False False False False False False False False 2013-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-20 4.0 9.0 4.0 1.0 1.0 1.0 -CLB0031 79 False 2005-10-01 False True Centre Léon Bérard -1 1 True False female 8 55.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-10-01 False 2005-10-01 False True False False False False False 2005-10-01 0.0 1.0 1.0 0.0 0.0 0.0 2005-10-01 2.0 12.0 10.0 0.0 2.0 15.0 -CLB0033 65 False 2016-03-14 False Centre Léon Bérard -1 0 True True male 7 68.0 p C02 1 False False False False False False False False False False False False False False False False False False False False False False 2016-03-14 False False False False False False False False False 2016-03-14 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2016-03-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 19.0 15.0 2.0 6.0 7.0 2016-03-14 2.0 1.0 8.0 5.0 2.0 7.0 7.0 -CLB0034 54 True 2012-08-10 True False Centre Léon Bérard -1 2 True True male 7 65.0 p C02 2 False False False False False False True True False False False True True True True False 2012-08-10 False False False False False True True 2012-08-10 False False False True True True True 0.0 0.0 0.0 0.0 2.0 1.0 2012-08-10 0.0 0.0 6.0 4.0 2.0 3.0 6.0 3.0 7.0 4.0 0.0 7.0 9.0 2012-08-10 3.0 3.0 12.0 7.0 2.0 3.0 8.0 -CLB0038 45 True 2016-05-25 False Centre Léon Bérard -1 0 True True male 7 90.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-05-25 False False False False 2016-05-25 False False False False False False 2016-05-25 0.0 0.0 0.0 0.0 0.0 2016-05-25 1.0 19.0 11.0 7.0 7.0 -CLB0040 60 False 2017-12-14 True Centre Léon Bérard -1 1 True False female 7 63.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False 2017-12-14 False False False False False False False False False 2017-12-14 False False False True False False 0.0 0.0 0.0 0.0 0.0 2017-12-14 0.0 0.0 1.0 1.0 0.0 0.0 2.0 10.0 5.0 3.0 1.0 2017-12-14 0.0 2.0 11.0 5.0 4.0 3.0 -CLB0043 50 True 2018-01-23 False Centre Léon Bérard -1 0 True True male 8 68.0 p C02 4 False False False False False False False False False False False False False False False False False False False False False False 2018-01-23 False False False False False False False False False 2018-01-23 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 9.0 2.0 1.0 8.0 2018-01-23 8.0 2.0 13.0 9.0 2.0 1.0 8.0 -CLB0045 53 False 2017-02-24 True Centre Léon Bérard -1 1 True True male 7 69.0 p C02 2 False False False False False False False False False False False False False False False True False False False False False False False False 2017-02-24 False False False False False False False False False False 2017-02-24 False False False False True False 0.0 0.0 0.0 0.0 0.0 2017-02-24 0.0 1.0 0.0 1.0 0.0 5.0 34.0 13.0 16.0 11.0 2017-02-24 6.0 33.0 10.0 17.0 6.0 -CLB0046 65 False 2013-03-09 False Centre Léon Bérard -1 0 True False female 7 68.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False 2013-03-09 False False False False False False False False False 2013-03-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-03-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 9.0 6.0 2.0 2.0 2.0 2013-03-09 1.0 5.0 21.0 15.0 1.0 1.0 7.0 -CLB0048 67 True 2015-08-09 False Centre Léon Bérard -1 0 True True male 8 63.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2015-08-09 False False False False False False False False False 2015-08-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-08-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 6.0 3.0 1.0 4.0 13.0 2015-08-09 5.0 4.0 11.0 6.0 1.0 2.0 7.0 -CLB0050 59 True 2014-08-31 True Centre Léon Bérard -1 2 True True female 7 55.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2014-08-31 False False False False 2014-08-31 False True False False 2014-08-31 0.0 2.0 2.0 0.0 0.0 2014-08-31 4.0 26.0 9.0 13.0 3.0 -CLB0052 43 False 2017-02-10 False Centre Léon Bérard -1 0 True True female 8 64.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2017-02-10 False False False False False False False False False 2017-02-10 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-02-10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 7.0 2.0 2.0 3.0 7.0 2017-02-10 1.0 5.0 17.0 11.0 1.0 2.0 9.0 -CLB0054 44 True 2003-09-05 True Centre Léon Bérard -1 2 True True female 7 67.0 p C02 2 False False True False False False False False False False False True False False True False 2003-09-05 False True False False False False False 2003-09-05 False False False True False False True 0.0 1.0 1.0 0.0 0.0 0.0 2003-09-05 0.0 0.0 1.0 1.0 0.0 0.0 1.0 6.0 16.0 10.0 0.0 1.0 7.0 2003-09-05 1.0 4.0 13.0 8.0 1.0 0.0 10.0 -CLB0057 69 True 2014-07-01 False Centre Léon Bérard -1 0 True True male 8 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-07-01 False False False False False False 2014-07-01 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-07-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 16.0 3.0 10.0 3.0 2014-07-01 1.0 2.0 9.0 5.0 2.0 3.0 3.0 -CLB0060 62 False 2017-09-19 False Centre Léon Bérard -1 2 True False female 7 52.0 p C02 2 False False False False False False False False False False False False False True False False True False 2017-09-19 False False False False False False False False False 2017-09-19 False False False True False False True 0.0 0.0 0.0 0.0 0.0 0.0 2017-09-19 0.0 0.0 1.0 1.0 0.0 0.0 1.0 3.0 13.0 7.0 3.0 6.0 12.0 2017-09-19 1.0 4.0 20.0 16.0 0.0 11.0 10.0 -CLB0062 50 True 2008-12-15 False Centre Léon Bérard -1 0 True True male 7 60.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2008-12-15 False 2008-12-15 False False False False False False False False False 2008-12-15 0.0 0.0 0.0 0.0 0.0 0.0 2008-12-15 4.0 12.0 6.0 2.0 1.0 15.0 -CLB0064 61 True 2018-01-17 False Centre Léon Bérard -1 0 True True male 8 67.0 p C02 3 False False False False False False False False False False False False False False False False False False False False False False 2018-01-17 False False False False False False False False False 2018-01-17 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2018-01-17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 9.0 0.0 5.0 9.0 2018-01-17 1.0 3.0 14.0 8.0 3.0 2.0 10.0 -CLB0067 44 True 2017-03-04 False Centre Léon Bérard -1 2 True True female 8 68.0 p C02 3 False False False False False False False False False False True False True True False False False False False False 2017-03-04 False False False False False False False False False 2017-03-04 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2017-03-04 0.0 2.0 3.0 1.0 0.0 0.0 0.0 3.0 16.0 8.0 5.0 4.0 5.0 2017-03-04 2.0 4.0 14.0 6.0 4.0 4.0 4.0 -CLB0069 56 False 2013-06-02 False Centre Léon Bérard -1 0 True True female 8 59.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-06-02 False False False False False False False False False 2013-06-02 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 17.0 7.0 4.0 2.0 8.0 2013-06-02 2.0 9.0 14.0 3.0 2.0 4.0 11.0 -CLB0070 65 True 2013-07-16 False Centre Léon Bérard -1 0 True True female 8 70.0 p C03 4 False False False False False False False False False False False False False False False False False False False False False False 2013-07-16 False False False False False False False False False 2013-07-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-07-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 14.0 11.0 2.0 0.0 10.0 2013-07-16 3.0 2.0 12.0 8.0 2.0 0.0 4.0 -CLB0072 59 False 2015-03-08 Centre Léon Bérard -1 0 True True female 8 39.0 p C04 4 True False True False False False False False False False False False False False False False False False False False False False False False False 2015-03-08 False False False False True True False False False False False 2015-03-08 False False False False False False 2.0 2.0 0.0 0.0 0.0 2015-03-08 0.0 0.0 0.0 0.0 0.0 2.0 17.0 8.0 7.0 2.0 2015-03-08 3.0 13.0 5.0 5.0 1.0 -CLB0074 49 True 2010-05-22 False Centre Léon Bérard -1 1 True True male 8 57.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2010-05-22 False False False False False False False False False 2010-05-22 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2010-05-22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 16.0 4.0 9.0 7.0 2010-05-22 4.0 5.0 16.0 11.0 0.0 9.0 14.0 -CLB0075 55 True 2009-06-19 False Centre Léon Bérard -1 0 True True male 7 73.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-06-19 False False False False False False False False False 2009-06-19 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-06-19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 13.0 9.0 1.0 4.0 13.0 2009-06-19 2.0 0.0 8.0 6.0 2.0 3.0 10.0 -CLB0076 45 True 2005-04-12 False Centre Léon Bérard -1 1 True True male 8 99.0 p C04 3 False False False False False False False False False False False False False True False False False False False False 2005-04-12 False False False False False False False False False 2005-04-12 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2005-04-12 0.0 0.0 1.0 1.0 0.0 0.0 0.0 3.0 18.0 14.0 1.0 5.0 21.0 2005-04-12 4.0 3.0 13.0 9.0 1.0 13.0 14.0 -CLB0079 56 True 2007-06-24 False Centre Léon Bérard -1 0 True True male 7 59.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False 2007-06-24 False False False False False False False False False False 2007-06-24 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-06-24 0.0 0.0 0.0 0.0 0.0 0.0 8.0 19.0 10.0 1.0 1.0 17.0 2007-06-24 7.0 24.0 16.0 1.0 2.0 16.0 -CLB0081 65 False 2013-06-17 True Centre Léon Bérard -1 0 True True male 8 97.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False 2013-06-17 False False False False False False False False False False 2013-06-17 False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-06-17 0.0 0.0 0.0 0.0 0.0 0.0 7.0 15.0 8.0 0.0 4.0 6.0 2013-06-17 6.0 17.0 11.0 0.0 4.0 8.0 -CLB0083 61 True 2006-10-21 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-21 False False False False False False False False False 2006-10-21 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0 10.0 4.0 2.0 3.0 8.0 2006-10-21 2.0 5.0 10.0 5.0 0.0 3.0 10.0 -CLB0085 50 True 2009-04-05 False Centre Léon Bérard -1 0 True True male 7 52.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2009-04-05 False False False False False False False False False 2009-04-05 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2009-04-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 11.0 8.0 0.0 5.0 4.0 2009-04-05 1.0 2.0 11.0 7.0 2.0 8.0 13.0 -CLB0086 59 True 2008-07-27 True Centre Léon Bérard -1 2 True True male 7 82.0 p C04 1 False False False False False True False False False False False False False True False False False False False False 2008-07-27 False False False False True False False False False 2008-07-27 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2008-07-27 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 10.0 6.0 2.0 3.0 13.0 2008-07-27 3.0 8.0 22.0 9.0 5.0 1.0 7.0 -CLB0087 61 True 2006-10-16 False Centre Léon Bérard -1 0 True True male 7 60.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-10-16 False False False False False False False False False 2006-10-16 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-10-16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 26.0 20.0 0.0 7.0 13.0 2006-10-16 4.0 3.0 18.0 14.0 1.0 6.0 23.0 -CLB0088 48 True 2018-07-30 False False Centre Léon Bérard -1 0 True True male 8 58.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2018-07-30 False False False False False False 2018-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2018-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 34.0 12.0 17.0 4.0 2018-07-30 1.0 6.0 25.0 18.0 1.0 4.0 7.0 -CLB0090 64 True 2013-04-09 False Centre Léon Bérard -1 0 True True male 8 64.0 p C04 1 False False False False False False False False False False False False False False False False False False False False False False 2013-04-09 False False False False False False False False False 2013-04-09 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-04-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 12.0 7.0 3.0 1.0 8.0 2013-04-09 6.0 6.0 11.0 4.0 1.0 2.0 6.0 -CLB0091 54 True 2013-01-15 False Centre Léon Bérard -1 0 True True male 8 72.0 p C04 3 False False False False False False False False False False True False True False False False False False False False False False 2013-01-15 False False False False False False False False False 2013-01-15 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-01-15 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 12.0 8.0 2.0 1.0 12.0 2013-01-15 2.0 4.0 14.0 9.0 1.0 3.0 17.0 -CLB0093 52 False 2007-11-03 True Centre Léon Bérard -1 1 True True male 7 63.0 p C04 1 False False False False False False False False False False False False False False False False True False False False False False 2007-11-03 False False False False False False False False False 2007-11-03 False False False False False False True False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-11-03 0.0 0.0 1.0 0.0 1.0 0.0 0.0 5.0 17.0 8.0 4.0 7.0 11.0 2007-11-03 1.0 5.0 25.0 16.0 4.0 3.0 10.0 -CLB0094 47 True 2005-12-01 False Centre Léon Bérard -1 0 True True male 8 70.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-12-01 False 2005-12-01 False False False False False False False False False 2005-12-01 0.0 0.0 0.0 0.0 0.0 0.0 2005-12-01 5.0 12.0 6.0 1.0 0.0 10.0 -CLB0096 52 True 2018-02-27 False False Centre Léon Bérard -1 0 True True male 8 75.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False 2018-02-27 False False False False False False False False False 2018-02-27 0.0 0.0 0.0 0.0 0.0 0.0 2018-02-27 16.0 28.0 7.0 5.0 9.0 13.0 -CLB0100 63 False 2014-08-14 False Centre Léon Bérard -1 0 True True female 7 70.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2014-08-14 False False False False False False False False False 2014-08-14 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2014-08-14 0.0 0.0 0.0 0.0 0.0 0.0 2.0 13.0 3.0 8.0 2.0 2014-08-14 3.0 2.0 13.0 4.0 7.0 1.0 -CLB0101 70 False 2015-07-05 False Centre Léon Bérard -1 1 True True female 7 50.0 p C04 2 False False False False False False False False False False True False True False False False False False False False False False False False False 2015-07-05 False False False False False False False False False 2015-07-05 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2015-07-05 0.0 1.0 1.0 0.0 0.0 0.0 3.0 33.0 9.0 21.0 7.0 2015-07-05 3.0 2.0 33.0 11.0 20.0 3.0 -CLB0102 60 True 2015-12-07 False Centre Léon Bérard -1 1 True True male 8 90.0 p C04 3 False False False False False False False False False False False False False False False False False False False False False False 2015-12-07 False False False False False False False False False 2015-12-07 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2015-12-07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 12.0 6.0 0.0 3.0 8.0 2015-12-07 3.0 4.0 13.0 7.0 2.0 5.0 12.0 -CLB0106 48 True 2007-01-19 False Centre Léon Bérard -1 0 True True male 7 57.0 p C05 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-01-19 False 2007-01-19 False False False False False False False False False 2007-01-19 0.0 0.0 0.0 0.0 0.0 0.0 2007-01-19 5.0 20.0 15.0 0.0 2.0 17.0 -CLB0108 50 False 2018-09-10 False Centre Léon Bérard -1 2 True True male 8 66.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2018-09-10 False False False False False False False False False 2018-09-10 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2018-09-10 0.0 2.0 2.0 0.0 0.0 0.0 3.0 24.0 11.0 10.0 1.0 2018-09-10 2.0 3.0 19.0 9.0 7.0 3.0 -CLB0109 61 False 2017-07-27 False Centre Léon Bérard -1 0 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-27 False False False False 2017-07-27 False False False False False False 2017-07-27 0.0 0.0 0.0 0.0 0.0 2017-07-27 10.0 26.0 13.0 3.0 4.0 -CLB0112 63 False 2018-02-14 False Centre Léon Bérard -1 1 True True male 8 60.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2018-02-14 False 2018-02-14 False True False False False False False 2018-02-14 0.0 1.0 1.0 0.0 0.0 0.0 2018-02-14 6.0 15.0 8.0 1.0 2.0 7.0 -CLB0116 56 True 2014-09-30 True Centre Léon Bérard -1 3 True True male 8 75.0 p C06 4 False False False False False False False False False False True False True False False False False False False False False False False False False 2014-09-30 False False False False False False False False False 2014-09-30 True False True False False False False False 0.0 0.0 0.0 0.0 0.0 2014-09-30 0.0 2.0 2.0 0.0 0.0 0.0 7.0 25.0 8.0 10.0 4.0 2014-09-30 0.0 2.0 14.0 7.0 5.0 2.0 -CLB0125 60 False 2016-04-18 False False Centre Léon Bérard -1 1 True True male 8 66.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False 2016-04-18 False False False False False False False False False 2016-04-18 False False False True False False 0.0 0.0 0.0 0.0 0.0 2016-04-18 0.0 0.0 1.0 1.0 0.0 0.0 4.0 20.0 8.0 8.0 5.0 2016-04-18 2.0 0.0 26.0 11.0 15.0 3.0 -CLB0129 60 True 2013-11-25 False False Centre Léon Bérard -1 2 True True male 8 90.0 p C09 3 False False False False False False False False False False False False False False False False False False True False 2013-11-25 False False False False False False False False False 2013-11-25 False False False False False False False False True 0.0 0.0 0.0 0.0 0.0 0.0 2013-11-25 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 9.0 5.0 1.0 4.0 12.0 2013-11-25 1.0 5.0 13.0 7.0 1.0 5.0 15.0 -CLB0130 62 False 2007-04-18 False True Centre Léon Bérard -1 0 True False female 8 67.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2007-04-18 False 2007-04-18 False False False False False False False False False 2007-04-18 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-18 2.0 18.0 14.0 2.0 3.0 6.0 -CLB0132 44 True 2004-04-06 True False Centre Léon Bérard -1 3 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-04-06 False 2004-04-06 False True False False False False False 2004-04-06 0.0 2.0 2.0 0.0 0.0 0.0 2004-04-06 1.0 31.0 20.0 10.0 8.0 9.0 -CLB0134 56 True 2005-02-25 True False Centre Léon Bérard -1 2 True True male 8 75.0 p C09 3 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2005-02-25 False 2005-02-25 False True False False False False False 2005-02-25 0.0 1.0 1.0 0.0 0.0 0.0 2005-02-25 4.0 21.0 15.0 2.0 26.0 18.0 -CLB0136 83 False 2004-01-26 True False Centre Léon Bérard -1 3 True False female 8 55.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-01-26 False 2004-01-26 False True False False False False False 2004-01-26 0.0 1.0 1.0 0.0 0.0 0.0 2004-01-26 3.0 11.0 7.0 1.0 1.0 16.0 -CLB0137 67 False 2007-04-27 True False Centre Léon Bérard -1 3 True True male 8 57.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2007-04-27 False False False False False False False False False 2007-04-27 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2007-04-27 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 13.0 11.0 2.0 5.0 9.0 2007-04-27 2.0 2.0 13.0 7.0 4.0 2.0 0.0 -CLB0138 56 True 2013-09-24 False False Centre Léon Bérard -1 1 True True male 8 80.0 p C01 4 False False False False False False False False False False False False True False False False False False False 2013-09-24 False False False False False False False False False False 2013-09-24 False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2013-09-24 0.0 1.0 1.0 0.0 0.0 0.0 3.0 11.0 6.0 2.0 3.0 7.0 2013-09-24 5.0 21.0 14.0 2.0 9.0 10.0 -CLB0141 59 True 2016-07-22 False False Centre Léon Bérard -1 2 True True male 8 71.0 p C09 2 False False False True False True False False False False False True False False False False False False False False 2016-07-22 False True False True False False False 2016-07-22 False True False False False False False 2.0 0.0 1.0 0.0 2016-07-22 0.0 1.0 0.0 0.0 0.0 14.0 0.0 3.0 9.0 2016-07-22 2.0 13.0 0.0 3.0 15.0 -CLB0144 43 False 2015-02-06 False True Centre Léon Bérard -1 0 True True male 8 63.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False 2015-02-06 False False False False False False False False False 2015-02-06 False False False False False False 0.0 0.0 0.0 2015-02-06 0.0 0.0 0.0 0.0 0.0 7.0 6.0 5.0 2015-02-06 1.0 27.0 8.0 18.0 5.0 -CLB0150 60 False 2005-08-12 False True Centre Léon Bérard -1 0 True True female 8 81.0 p C09 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-08-12 False 2005-08-12 False False False False False False False False False 2005-08-12 0.0 0.0 0.0 0.0 0.0 0.0 2005-08-12 4.0 16.0 9.0 3.0 6.0 14.0 -CLB0152 59 True 2008-08-20 False True Centre Léon Bérard -1 1 True True male 8 71.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-08-20 False 2008-08-20 False True False False False False False 2008-08-20 0.0 1.0 1.0 0.0 0.0 0.0 2008-08-20 3.0 11.0 7.0 1.0 2.0 10.0 -CLB0153 53 False 2007-12-03 True True Centre Léon Bérard -1 1 True True male 8 100.0 p C09 3 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2007-12-03 False 2007-12-03 False True True False True 2007-12-03 0.0 3.0 1.0 2.0 0.0 1.0 2007-12-03 5.0 15.0 8.0 2.0 2.0 10.0 -CLB0154 59 True 2007-08-17 True True Centre Léon Bérard -1 1 True True male 8 53.0 p C09 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2007-08-17 False 2007-08-17 False True False False False False False 2007-08-17 0.0 1.0 1.0 0.0 0.0 0.0 2007-08-17 3.0 17.0 14.0 0.0 11.0 8.0 -CLB0156 69 True 2008-04-23 False True Centre Léon Bérard -1 1 True True male 8 88.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2008-04-23 False 2008-04-23 False True False False False False False 2008-04-23 0.0 1.0 1.0 0.0 0.0 0.0 2008-04-23 1.0 10.0 8.0 1.0 4.0 8.0 -CLB0158 59 False 2011-02-11 False True Centre Léon Bérard -1 0 True True female 8 60.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2011-02-11 False 2011-02-11 False False False False False False False False False 2011-02-11 0.0 0.0 0.0 0.0 0.0 0.0 2011-02-11 1.0 14.0 8.0 5.0 4.0 3.0 -CLB0159 59 True 2008-03-03 True True Centre Léon Bérard -1 1 True True male 8 82.0 p C09 2 False False False False False False False False False False False False False True False False False False False False 2008-03-03 False False False False False False False False False 2008-03-03 False False False True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2008-03-03 0.0 0.0 2.0 2.0 0.0 0.0 0.0 9.0 24.0 13.0 2.0 2.0 12.0 2008-03-03 2.0 3.0 15.0 12.0 0.0 9.0 11.0 -CLB0161 63 False 2009-04-27 True True Centre Léon Bérard -1 2 True True male 8 56.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2009-04-27 False False False False 2009-04-27 False True True False 2009-04-27 0.0 5.0 3.0 2.0 0.0 2009-04-27 5.0 18.0 9.0 4.0 2.0 -CLB0162 57 False 2005-10-21 True True Centre Léon Bérard -1 2 True True male 8 47.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2005-10-21 False 2005-10-21 False True True False False False False 2005-10-21 0.0 3.0 2.0 1.0 0.0 0.0 2005-10-21 4.0 16.0 8.0 4.0 3.0 1.0 -CLB0163 75 False 2008-09-26 True True Centre Léon Bérard -1 1 True True female 8 71.0 p C09 2 False False True False False False False False False False False True False False False False False False 2008-09-26 False True False False False False False 2008-09-26 False False False True False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-09-26 0.0 0.0 2.0 2.0 0.0 0.0 0.0 4.0 14.0 10.0 0.0 2.0 14.0 2008-09-26 1.0 1.0 13.0 11.0 1.0 6.0 12.0 -CLB0168 64 False 2012-11-11 False True Centre Léon Bérard -1 2 True True male 8 73.0 p C09 2 False False False False False False False False False False False False False True True False True False False False False False False False False False False False 2012-11-11 False 2012-11-11 False True True False True 2012-11-11 0.0 12.0 11.0 1.0 0.0 4.0 2012-11-11 4.0 30.0 20.0 6.0 5.0 9.0 -CLB0170 45 False 2010-06-15 True Centre Léon Bérard -1 3 True True female 8 51.0 p C05 1 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-06-15 False 2010-06-15 False True False False False False False 2010-06-15 0.0 1.0 1.0 0.0 0.0 0.0 2010-06-15 3.0 12.0 6.0 3.0 7.0 7.0 -CLB0173 55 True 2015-12-08 True Centre Léon Bérard -1 3 True True male 8 59.0 p C06 4 False False True True False False False False False False False False False False False False False False False False False False 2015-12-08 False False False False False False True True False 2015-12-08 False False False False False 0.0 2.0 1.0 1.0 0.0 2015-12-08 0.0 0.0 0.0 0.0 3.0 12.0 2.0 7.0 2.0 2015-12-08 2.0 18.0 9.0 7.0 -CLB0174 58 True 2008-02-17 True Centre Léon Bérard -1 3 True True male 8 80.0 p C05 1 False False True False False False False False False False True False False False False False False 2008-02-17 False False True False False False False False 2008-02-17 False True False False False False False 0.0 2.0 2.0 0.0 0.0 0.0 2008-02-17 0.0 1.0 1.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 9.0 5.0 2008-02-17 5.0 9.0 3.0 1.0 6.0 9.0 -CLB0179 57 True 2017-02-04 True Centre Léon Bérard -1 3 True True male 8 73.0 p C12 4 False False False False False False False False True False False True False False False False False False False False 2017-02-04 False False False False False False True 2017-02-04 False True False False False False False 0.0 0.0 0.0 1.0 2017-02-04 0.0 1.0 1.0 0.0 0.0 0.0 13.0 1.0 13.0 18.0 2017-02-04 1.0 15.0 7.0 7.0 3.0 3.0 -CLB0192 72 True 2006-07-24 True Centre Léon Bérard -1 3 True True male 8 57.0 p C12 4 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2006-07-24 False 2006-07-24 False True True False False False False 2006-07-24 0.0 7.0 4.0 3.0 0.0 0.0 2006-07-24 2.0 20.0 12.0 6.0 2.0 3.0 -CLB0207 48 True 2005-09-20 False Centre Léon Bérard -1 2 True True male 8 66.0 p C32 2 False False False False False False False False True False False False False False False True True False False False 2005-09-20 False False False False False False True 2005-09-20 False False False False False True True 0.0 0.0 0.0 2.0 2005-09-20 0.0 0.0 0.0 1.0 1.0 10.0 0.0 6.0 8.0 2005-09-20 2.0 7.0 0.0 4.0 11.0 -CLB0215 62 True 2017-06-11 True Centre Léon Bérard -1 3 True True male 8 69.0 p C32 4 False False False True False False False False False False False False False False False False True False False False 2017-06-11 False True False False False False False 2017-06-11 False False False False False False True 3.0 0.0 0.0 0.0 2017-06-11 0.0 0.0 0.0 0.0 0.0 5.0 12.0 1.0 8.0 18.0 2017-06-11 1.0 9.0 7.0 1.0 6.0 21.0 -CLB0270 54 True 2017-11-01 False Centre Léon Bérard -1 1 True True male 8 68.0 p C10 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False 2017-11-01 False 2017-11-01 False False False False True False False False False 2017-11-01 0.0 1.0 0.0 1.0 0.0 0.0 2017-11-01 5.0 29.0 19.0 5.0 3.0 7.0 -CLB0271 53 False 2009-05-11 True Centre Léon Bérard -1 3 True False female 8 70.0 p C02 2 False False False False False True False False False False False False False True False False False False False False 2009-05-11 False False False False True False False False False 2009-05-11 False False False True False False False False False 0.0 1.0 0.0 1.0 0.0 0.0 2009-05-11 0.0 0.0 1.0 1.0 0.0 0.0 0.0 2.0 7.0 4.0 1.0 12.0 14.0 2009-05-11 2.0 4.0 10.0 5.0 1.0 2.0 11.0 -CLB0274 51 True 2012-04-24 False Centre Léon Bérard -1 1 True True male 8 63.0 p C04 4 False False False False False False False False False False True False True False False False False False False False False False 2012-04-24 False False False False False False False False False 2012-04-24 True False True False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-24 0.0 1.0 1.0 0.0 0.0 0.0 0.0 3.0 11.0 5.0 3.0 6.0 15.0 2012-04-24 1.0 4.0 16.0 10.0 2.0 9.0 17.0 -CLB0287 58 True 2015-03-02 False Centre Léon Bérard -1 0 True True male 7 95.0 p C02 2 False False False False False False False False False False False False False False False False False False False False False False False False False 2015-03-02 False False False False False False False False False 2015-03-02 False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2015-03-02 0.0 0.0 0.0 0.0 0.0 0.0 4.0 22.0 10.0 8.0 3.0 2015-03-02 2.0 3.0 17.0 6.0 8.0 2.0 -CLB0288 76 False 2012-07-20 True Centre Léon Bérard -1 3 True False female 8 79.0 p C03 4 False False False False False False False False False False True False True True False False False False False False 2012-07-20 False False False False False False False False False 2012-07-20 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-07-20 0.0 1.0 2.0 1.0 0.0 0.0 0.0 5.0 8.0 2.0 1.0 1.0 7.0 2012-07-20 1.0 1.0 9.0 7.0 1.0 1.0 5.0 -CLB0290 63 True 2008-11-23 False Centre Léon Bérard -1 2 True True male 8 58.0 p C04 4 False False True False False False False False True False True False False False False False False False False False 2008-11-23 False False True False False False False False 2008-11-23 True False True False False False False False False False 0.0 1.0 1.0 0.0 0.0 0.0 2008-11-23 0.0 2.0 0.0 0.0 0.0 2.0 8.0 5.0 1.0 1.0 1.0 2008-11-23 1.0 6.0 4.0 3.0 5.0 -CLB0293 55 True 2010-09-20 True Centre Léon Bérard -1 3 True True male 8 80.0 p C06 4 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2010-09-20 False False 2010-09-20 False True False False False False 2010-09-20 0.0 2.0 0.0 0.0 2010-09-20 4.0 6.0 2.0 3.0 -CLB0295 61 False 2016-02-16 False Centre Léon Bérard -1 0 True True female 8 51.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2016-02-16 False 2016-02-16 False False False False False False False False False 2016-02-16 0.0 0.0 0.0 0.0 0.0 0.0 2016-02-16 6.0 19.0 9.0 4.0 1.0 3.0 -CLB0296 60 True 2006-12-20 False Centre Léon Bérard -1 0 True True male 7 69.0 p C06 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2006-12-20 False 2006-12-20 False False False False False False False False False 2006-12-20 0.0 0.0 0.0 0.0 0.0 0.0 2006-12-20 2.0 13.0 5.0 6.0 4.0 2.0 -CLB0303 58 False 2015-11-21 False False Centre Léon Bérard -1 1 True False female 8 74.0 p C01 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2015-11-21 False 2015-11-21 False True False False False False False 2015-11-21 0.0 1.0 1.0 0.0 0.0 0.0 2015-11-21 7.0 23.0 12.0 4.0 4.0 3.0 -CLB0304 54 True 2005-06-20 False False Centre Léon Bérard -1 0 True True male 8 65.0 p C09 2 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-06-20 False 2005-06-20 False False False False False False False False False 2005-06-20 0.0 0.0 0.0 0.0 0.0 0.0 2005-06-20 11.0 37.0 20.0 6.0 2.0 11.0 -CLB0317 77 False 2004-05-26 True Centre Léon Bérard -1 2 True False female 7 57.0 p C02 2 False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False 2004-05-26 False 2004-05-26 False True False False False False False 2004-05-26 0.0 2.0 2.0 0.0 0.0 0.0 2004-05-26 1.0 14.0 9.0 4.0 3.0 7.0 -CLB0318 64 True 2003-12-22 False Centre Léon Bérard -1 0 True True male 8 59.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2003-12-22 False 2003-12-22 False False False False False False False False False 2003-12-22 0.0 0.0 0.0 0.0 0.0 0.0 2003-12-22 4.0 14.0 9.0 1.0 4.0 11.0 -CLB0319 57 True 2005-03-21 False False Centre Léon Bérard -1 2 True True male 8 57.0 p C09 1 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2005-03-21 False 2005-03-21 False False False False False False False False False 2005-03-21 0.0 0.0 0.0 0.0 0.0 0.0 2005-03-21 4.0 14.0 10.0 0.0 8.0 20.0 -CLB0320 64 True 2006-12-13 False True Centre Léon Bérard -1 1 True True male 8 95.0 p C09 4 False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False 2006-12-13 False 2006-12-13 False False False False False False True 2006-12-13 0.0 0.0 0.0 0.0 0.0 2.0 2006-12-13 6.0 13.0 5.0 2.0 7.0 8.0 -CLB0321 47 True 2012-06-25 True True Centre Léon Bérard -1 1 True True male 8 85.0 p C09 2 False False False False False False False False False False False False False True True False False False False False False False False False False False False False False False 2012-06-25 False False False False 2012-06-25 False True True False 2012-06-25 0.0 2.0 1.0 1.0 0.0 2012-06-25 4.0 8.0 2.0 2.0 2.0 -CLB0325 64 False 2011-01-24 False Centre Léon Bérard -1 0 True True male 8 76.0 p C04 4 False False False False False False False False False False False False False False False False False False False False False False False False False 2011-01-24 False False False False False False 2011-01-24 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 2011-01-24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 19.0 10.0 6.0 4.0 2011-01-24 2.0 2.0 7.0 2.0 3.0 3.0 4.0 -CLB0326 69 False 2011-07-13 False Centre Léon Bérard -1 2 True True male 7 82.0 p C04 2 False False False False False False False False False False True False True True False False False False False False 2011-07-13 False False False False False False False False False 2011-07-13 True False True True False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2011-07-13 0.0 2.0 3.0 1.0 0.0 0.0 0.0 2.0 21.0 17.0 2.0 8.0 12.0 2011-07-13 3.0 6.0 23.0 11.0 6.0 4.0 0.0 -CLB0328 63 True 2014-03-31 True Centre Léon Bérard -1 3 True True male 8 59.0 p C02 1 False False False False False False False False False False False False False False False False False True False False False False False False False 2014-03-31 False False False False False False False False False 2014-03-31 False False False False False False False True 0.0 0.0 0.0 0.0 0.0 2014-03-31 0.0 0.0 0.0 0.0 0.0 1.0 1.0 10.0 5.0 4.0 3.0 2014-03-31 2.0 0.0 18.0 8.0 10.0 2.0 -CLB0332 77 True 2013-07-30 False Centre Léon Bérard -1 2 True True male 8 68.0 p C04 2 False False False False False False False True False False False False False False False False False False False False 2013-07-30 False False False False False False True 2013-07-30 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 1.0 2013-07-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0 9.0 4.0 2.0 10.0 5.0 2013-07-30 1.0 3.0 13.0 8.0 2.0 4.0 4.0 -CLB0333 61 True 2006-09-25 False Centre Léon Bérard -1 0 True True male 8 63.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2006-09-25 False False False False False False False False False 2006-09-25 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2006-09-25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 9.0 7.0 0.0 3.0 9.0 2006-09-25 1.0 5.0 12.0 5.0 2.0 4.0 7.0 -CLB0334 59 True 2012-04-06 False Centre Léon Bérard -1 0 True True male 7 89.0 p C04 2 False False False False False False False False False False False False False False False False False False False False False False 2012-04-06 False False False False False False False False False 2012-04-06 False False False False False False False False False False False 0.0 0.0 0.0 0.0 0.0 0.0 2012-04-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 25.0 17.0 3.0 4.0 6.0 2012-04-06 2.0 5.0 17.0 10.0 2.0 1.0 9.0 -CLB0337 57 True 2006-02-10 False True Centre Léon Bérard -1 1 True True male 8 76.0 p C09 2 False False False False False False False False False False False False False True False False False False False False False False 2006-02-10 False False False False False False False False False 2006-02-10 False True False False False False False 0.0 0.0 0.0 0.0 2006-02-10 0.0 4.0 4.0 0.0 0.0 0.0 6.0 2.0 0.0 11.0 2006-02-10 3.0 14.0 7.0 4.0 5.0 2.0 -CLB0347 48 True 2005-08-22 True Centre Léon Bérard -1 3 True True male 8 49.0 p C32 2 False False False False False True False True False False False True False False False False False False 2005-08-22 False False False False False False False True False True 2005-08-22 True False False False False False 0.0 1.0 0.0 1.0 0.0 1.0 2005-08-22 1.0 0.0 0.0 0.0 1.0 13.0 9.0 3.0 7.0 7.0 2005-08-22 6.0 0.0 4.0 9.0 -CLB0353 62 True 2012-02-22 False Centre Léon Bérard -1 0 True True male 8 55.0 p C06 3 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2012-02-22 False 2012-02-22 False False False False False False False False False 2012-02-22 0.0 0.0 0.0 0.0 0.0 0.0 2012-02-22 5.0 10.0 5.0 0.0 4.0 8.0 -CLB0354 62 False 2010-04-19 False Centre Léon Bérard -1 2 True True male 7 80.0 p C02 2 False False False False False False False False False False False False False False False False True False True False False False False False False False False False False False 2010-04-19 False 2010-04-19 False False False False True False True 2010-04-19 0.0 1.0 0.0 1.0 0.0 1.0 2010-04-19 5.0 15.0 9.0 1.0 4.0 9.0 -CLB0356 57 True 2005-12-15 True Centre Léon Bérard -1 3 True True male 8 71.0 p C12 2 False False True False False False False False True False True False False False True True False False False False 2005-12-15 False True False False False False False 2005-12-15 True False True False False False True True False False False 0.0 2.0 2.0 0.0 0.0 0.0 2005-12-15 0.0 1.0 2.0 0.0 1.0 1.0 0.0 3.0 11.0 8.0 0.0 4.0 21.0 2005-12-15 5.0 17.0 8.0 4.0 3.0 6.0 -CLB0361 64 True 2017-04-10 True Centre Léon Bérard -1 3 True False male 8 73.0 p C02 4 True False True True True False False False False False False True False True True False 2017-04-10 False True True True True False False False False 2017-04-10 False True False True True 1.0 4.0 1.0 2.0 0.0 0.0 2017-04-10 0.0 2.0 2.0 0.0 1.0 7.0 2.0 7.0 3.0 2.0 1.0 3.0 2017-04-10 4.0 7.0 3.0 0.0 3.0 7.0 -CLB0364 56 True 2006-05-15 True False Centre Léon Bérard -1 3 True True male 8 62.0 c C09 3 False False False False False False False False False False False False False True True True True True False False False False False False False False False False False 2006-05-15 False 2006-05-15 False True True True True True 2006-05-15 0.0 30.0 25.0 5.0 4.0 18.0 2.0 2006-05-15 4.0 37.0 27.0 6.0 5.0 21.0 2.0 -BE333 67 True 2011-01-07 False True Inselspital Bern 0 2 True True male 7 left False False oral cavity p C02.1 1 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2011-08-06 False False False False False False False False False False False 2a 2a 21b+1c 1c 21b 1b+1c 1c 1b 2011-11-07 False False False True 2.0 2011-11-07 0.0 0.0 0.0 2.0 1.0 36.0 2011-11-07 2.0 1.0 12.0 -BE399 74 False 2012-12-13 False True Inselspital Bern 0 0 True False male 7 left False False oral cavity p C02.1 1 True False False False False False False False False False False False False False False False False False False False False False True True False False False False False False False False False 2012-11-26 True True True True True True True False False False False 2a 2a False 2012-12-13 False False False False False False False 0.0 0.0 2012-12-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 21.0 2012-12-13 3.0 19.0 10.0 6.0 4.0 6.0 -BE509 37 False 2014-07-30 True True Inselspital Bern 0 2 True True male 7 central True True oropharynx c C10.8 2 False False False False False False False False False False False False False False True True True True True True False False False False False False False False False False False False False 2014-07-22 False False False False False False False False False False False 15a 15a 10a 10a 2017-07-30 False False False True True True True True True 30.0 2017-07-30 c-IV 30.0 0.0 0.0 0.0 18.0 12.0 8.0 4.0 6.0 2.0 10.0 53.0 2017-07-30 2.0 1.0 1.0 35.0 26.0 10.0 16.0 8.0 2.0 15.0 -BE520 50 True 2011-01-02 False True Inselspital Bern 0 2 True True male 7 left False False oropharynx c C01 2 False False False True False False False False False False False False False False True True True False False False False False False False False False False False False False False False False 2011-01-02 False False False True True False False False False False False False False False False False False False False False False False 2011-02-22 False False False True True True False False False False False 1a 28b 28b 36c 36c 1a 33d 33d 26e 26e 6f 6f 2b 2b 3d 3d False False False True False False 2011-08-03 False False False True False False False False False 0.0 0.0 0.0 2.0 2.0 0.0 0.0 4.0 2011-08-03 0.0 0.0 0.0 3.0 3.0 0.0 0.0 0.0 0.0 0.0 0.0 28.0 61.0 2011-08-03 1.0 33.0 6.0 -BE306 20 False 2011-09-29 True True Inselspital Bern 0 2 True False female 7 right False False oral cavity p C02.1 2 False False False False False False False False False False False True False False True True False True True False False False False False False False False False False False False False False 2011-03-10 False False False True True False True True False False False 4a 4a 26b 26b 26b 17c 17c 17c 1a 1a 1b 1b 1b 3c 3c 3c 2011-04-10 True 5.0 2011-04-10 i-IV&i-V 22.0 1.0 47.0 2011-04-10 4.0 -BE321 83 False 2018-02-14 False False Inselspital Bern 0 2 True True female 7 right False False oral cavity p C02.1 1 False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False 2018-08-06 False False False False False False False False False False False False False False False False False False False False False False 2018-02-27 False False False False False False False False False False False 5a 5a 11b 11b 11b 1a 1a 1b 1b 1b 2018-07-24 True 2.0 2018-07-24 20.0 1.0 16.0 2018-07-24 5.0 -BE391 36 True 2012-07-12 True True Inselspital Bern 0 2 True True male 7 right False False oral cavity p C02.1 1 False False False True False False False False False False False True False True True True True True False False False False False False False True True False False False False False False 2012-12-14 False False False True True False False False False False False False False False False False False False False False False False 2014-12-21 True False True True True True True False False False False 12b 12b 16a 16a 16a 16a 16a 16a 1b 1b 1a 1a 1a 1a 1a 1a False False False True False False 2013-06-02 False False False 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2.0 2013-06-02 c-IIa 17.0 0.0 0.0 0.0 3.0 1.0 2.0 21.0 12.0 7.0 8.0 50.0 2013-06-02 2.0 1.0 1.0 -BE484 61 False 2018-12-28 False True Inselspital Bern 0 1 True False male 7 right False False oropharynx p C09.9 2 False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False False False False False False False False False False False False 2019-08-01 False False False False False False False False False False False 9a 9a 1a 1a 2019-03-26 True False False 1.0 2019-03-26 i-IIa 19.0 1.0 0.0 0.0 63.0 2019-03-26 9.0 29.0 25.0 -BE532 54 True 2014-06-19 False True Inselspital Bern 0 2 True False male 7 right False False oropharynx p C09.9 1 False False False True True True False False False False False True False False False False False False False False False False False False False False False False False False False False False 2014-06-13 True False True True True False False False False False False False False False True True True False False False False False 2014-02-07 False False False False False False False False False False False 2a 2a 12b 12b 1a 1a 2014-07-22 True False False False False False False False False 1.0 2014-07-22 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 2014-07-22 2.0 13.0 2.0 11.0 30.0 7.0 12.0 -BE591 72 False 2015-01-27 False True Inselspital Bern 0 1 True True female 7 right False False larynx c C32.1 2 False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False 2015-01-14 False False False False False False False False False False False False False False False False False False False False False False 2015-05-02 False False False False False False True True False False False 7a 7a 1b 1b 14c 14c 1a 1a 2015-02-20 True False False False False False False False 1.0 2015-02-20 i-I 13.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 2015-02-20 7.0 1.0 9.0 14.0 -62 47 True 2020-07-27 False Vall d'Hebron Barcelona Hospital 0 2 True True male 8 False False oropharynx P C09.9 2 18.0 False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False 2020-08-27 False False False False False False False False False False False False False False False False False False False False False False False False 2020-10-26 False False False True False False False False False False -75 52 True 2013-09-26 False Vall d'Hebron Barcelona Hospital 0 2 False True female 7 True True oropharynx C C01.9 2 4.0 False False False True False False True True False False False False False False False True True True False False False True False False False False False False True True False False False False 2013-10-02 False False False True True False False False False True False False False True True True False False False False 2013-10-25 False False False True True True False False False True -117 78 False 2015-03-12 False Vall d'Hebron Barcelona Hospital 0 3 False False male 7 False True oropharynx C C01.9 4 21.0 False False False True True True True False True False True True False False False True True False True False False False False False False False False False False False True False True False True True 2015-02-26 False False False True True False False False False False False False False True True True True False True False True True 2015-04-14 False False False True True False True False False False False False -123 63 False 2017-06-10 False Vall d'Hebron Barcelona Hospital 0 0 False True male 7 False False oropharynx C C10.3 3 13.0 False False False False False False False False False False False False False False False True False False False True False False False False False False False False False False False False False False False False 2017-07-28 False False False False False False False False False False False False False False False False False False False False False False False False 2017-07-28 False False False True False True False False False False -134 72 False 2019-11-26 False Vall d'Hebron Barcelona Hospital 1 3 False True female 8 True True oropharynx C C01.9 4 52.0 False False False True True False False False True True False False True False True True True True True False True True False True False False False False False False False False False False False False 2019-12-18 False False False True True True True False True True False True False False False True True False False False True True False False 2019-12-27 True False True True True True True False True True False True -157 68 False 2020-01-18 False Vall d'Hebron Barcelona Hospital 0 2 False True male 8 True True oropharynx C C05.1 3 12.0 False False False False False False False False False False False False False False False True False False True True False False False False False False False False False False False False False False False False 2020-02-11 False False False False False False False False False False False False False False False False False False False False False False False False 2020-02-03 False False False True True True False False False False -UMCGs0009 72 False 2019-08-27 False University Medical Center Groningen 0 3 True True 55.0 male 7 tumor 2021-12-03 True False False False False True hypopharynx p C12 3 False False False False False False True False False False False False False False False False False False False True True True False False False False False False False False False False True False False False False False False 2019-08-27 False False False True True False False False False False False False False False 2019-09-24 False True False False False False True False False False False 2019-09-24 False False False True True True 0.0 2.0 0.0 0.0 2019-09-24 0.0 2.0 8.0 2.0 -UMCGs0010 55 False 2016-05-18 University Medical Center Groningen 0 2 True True 41.0 male 7 tumor 2023-09-06 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True True False True False False False False False False False False False False False False False False False False False 2016-05-18 False False False True True False False False False False False False False False False False False 2016-07-05 False True True False False False True False False 2016-07-05 False False False True True False True 2.0 0.0 0.0 2016-07-05 0.0 6.0 4.0 0.0 1.0 -UMCGs0021 71 True 2017-11-20 University Medical Center Groningen 0 2 True True 54.0 male 7 other 2021-09-24 True False False False False True larynx p C32.1 4 False False False True False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2017-11-20 False False False False False False False False False False False False False False False False False False False 2017-12-14 False False False False False False True False False 2017-12-14 True False False 1.0 0.0 0.0 2017-12-14 2.0 0.0 0.0 -UMCGs0023 54 True 2016-06-17 University Medical Center Groningen 0 1 True True 37.0 female 7 other 2017-07-27 True False False False False True larynx p C32.1 3 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2016-06-17 False False False False False False False False False False False False False False False False False False False 2016-07-22 False False False False False False False False False False False 2016-07-22 True False False 0.0 0.0 0.0 2016-07-22 1.0 0.0 0.0 -UMCGs0033 69 False 2014-06-02 University Medical Center Groningen 0 1 True True 12.0 male 7 other 2023-02-16 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2014-06-02 False False False False False False False False False False False False False False False False False False False 2019-10-30 False False False False False False False False False False False 2019-10-30 True False False 0.0 0.0 0.0 2019-10-30 1.0 0.0 0.0 -UMCGs0037 60 False 2020-07-17 University Medical Center Groningen 0 2 True True 80.0 male 7 2024-01-25 False False False False False False larynx p C32.1 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2020-07-17 False False False False False False True False False False False False False 2020-08-31 False False False 2020-08-31 True False False False False False 2020-08-31 3.0 0.0 0.0 0.0 -UMCGs0046 60 False 2021-09-15 University Medical Center Groningen 0 2 True True 75.0 male 7 2021-12-06 False False False False False True larynx p C32.0 4 False False False True False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False 2021-09-15 False False False False False False False False False False False False False 2021-09-02 True False False 2021-09-02 False False False False True 1.0 0.0 0.0 2021-09-02 0.0 0.0 1.0 -UMCGs0051 66 False 2014-02-04 False University Medical Center Groningen 0 3 True True 50.0 male 7 tumor 2015-05-17 True True 2014-06-17 False False False True larynx p C32.1 3 False False False False False False False False False False False False False True False False False False False True False False False False False False False False False False False False False False False False False False False 2014-02-04 False False False True True True False False False False False 2014-03-11 False False False False False 2014-03-11 True False False False True False False False False 0.0 0.0 0.0 2014-03-11 1.0 0.0 1.0 0.0 0.0 -UMCGs0075 49 2007-10-03 University Medical Center Groningen 0 2 True True 30.0 male 7 other 2009-07-21 True False False False True True hypopharynx p C13.2 4 False False False True False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False 2007-10-03 False False False False False False False False False False False False False False 2007-10-03 False True True False False 2007-10-03 True True False False False False 1.0 0.0 0.0 2007-10-03 1.0 1.0 0.0 0.0 -UMCGs0077 64 2010-12-24 University Medical Center Groningen 0 2 True True 48.0 male 7 other 2018-07-05 True False False False False False larynx p C32.1 4 False False False False False False False False False False False False False True False False True False False False False False False False False False False False False False False False False False False False False 2010-12-24 False False False True False False False False False False False False False False 2011-01-25 True True False False False False False False False False 2011-01-25 True True False False False False False 0.0 0.0 0.0 2011-01-25 1.0 1.0 0.0 0.0 0.0 -UMCGs0081 89 2008-11-03 University Medical Center Groningen 0 2 True True male 7 other 2020-03-01 True False False False False False hypopharynx p C13.2 4 False False False False False False False False False False False False False False False False False False False True False True False False True False False False False False False False False False False False False False False 2008-11-03 False False False True False False False False False False False 2008-11-03 False False False False False 2008-11-03 False False False False False False True False True True 0.0 0.0 0.0 2008-11-03 0.0 0.0 5.0 0.0 1.0 1.0 -UMCGs0094 91 2010-10-11 University Medical Center Groningen 0 2 True True male 7 other 2012-11-14 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2010-10-11 False False False False False False False True False False False False False 2010-11-09 True False False False 2010-11-09 True False False False False False 2010-11-09 4.0 0.0 0.0 0.0 -UMCGs0095 66 True 2015-07-09 University Medical Center Groningen 0 2 True True 23.0 male 7 tumor 2016-05-01 True False True 2016-01-13 False False True larynx p C32.1 3 False False False True False False False False False False False False False False False False True True False False False False False False False False False False False False False True False False False False False 2015-07-09 False False False True True False False False False False False False False False 2015-08-03 True False False False True False False 2015-08-03 True True False False False False 2.0 0.0 0.0 2015-08-03 5.0 1.0 0.0 0.0 -UMCGs0106 67 True 2017-09-04 University Medical Center Groningen 0 1 True True 34.0 female 7 2023-07-26 False False False False False True larynx p C32.2 4 False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-09-04 False False False False False False False True False False False False False 2017-10-20 False True False False False 2017-10-20 False False False False False False 1.0 0.0 0.0 0.0 2017-10-20 0.0 0.0 0.0 0.0 -UMCGs0118 66 True 2012-01-26 University Medical Center Groningen 0 1 True True male 7 other 2024-01-24 True False False False False True larynx p C32.0 4 False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False 2012-01-26 False False False False False False True False False False False False False 2012-02-24 False True False False False False 2012-02-24 False False False True False False False False False False 2012-02-24 0.0 1.0 0.0 0.0 0.0 0.0 -USZ0001 53 True 2013-09-13 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.0 3 False False False False False False True True False False False False False False False False True True False True False True False False False False True True 2013-09-13 False False False False False False False False False False False False False 2013-09-12 False False False True True False True False False False False False False False False False False False False True True False False False False False 2013-09-25 False False False False False False True False True False False -USZ0008 74 False 2013-03-08 False University Hospital Zurich 0 2 False True male 7 left False True hypopharynx c C13.2 1 False False False True True False False False False False False False False False False False True True True True False True False False False False 2013-03-08 True True False False False True True False False False False False False False False 2013-02-28 False False False True True True False False False False False False False False False False True True False False False False False False False False 2013-04-16 False False False True True False False False True False False -USZ0074 65 True 2015-11-23 University Hospital Zurich 0 2 False True male 7 central True True larynx c C32.1 2 False False False True False False False False False False False False False False False False True True False True True False False False False False True 2015-11-23 False False False False False False False False False False False False False 2016-01-06 False False False True True False True True False False False False False False False False False False False False False False False False False False 2016-01-04 False False False True True False True False False False False False False -USZ0081 62 True 2016-03-31 False University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 2 False False False True False False True False False False False False False False False False True True False True False True False False False False False 2016-04-01 True True False False False True True False False False False False False False False 2016-03-24 False False False True True False True False True False False False False False False False False True False False False False False False 2016-06-29 False False False True True False True False False False False False False -USZ0091 62 True 2017-04-30 False University Hospital Zurich 0 2 False True female 7 right False True hypopharynx c C13.2 4 True False False True True True True True False False False False False True True True True True True True True False False False True False False True 2017-04-30 True False False False True True False False False False False False 2017-06-01 False False False True True True False False False False False False False True False True True True True True True False False False False False 2017-08-25 True True True True True True True True False False False True False -USZ0100 72 False 2017-04-13 True University Hospital Zurich 0 2 False True male 7 right False True larynx c C32.1 4 False False False True True False True False False False False False False False False False True True False True False True False False False False 2017-04-07 False False False False False False False False False False False False False 2017-04-05 False False False False False False True False True False False False False False True True False True False False False False False False 2017-04-27 False False False True True False True False False False False False False -USZ0108 64 True 2018-04-27 False University Hospital Zurich 0 1 False True male 8 right False False hypopharynx c C12 2 False False False False False False False False False False False False False False False False True True False False False True False False False False 2018-05-15 True True False False False False False False False False False False False False False 2018-04-03 False False False False False False False False False False False False False False False False False False False False False False False False False False 2018-05-11 False False False True True False False False True False False False False False False False False False False False False False False False 2018-05-07 False False False False False False False False True False False -USZ0129 61 True 2019-10-14 False University Hospital Zurich 0 2 False False male 8 central True True hypopharynx c C13.2 1 False False False True True True True True True False False False False False False False True True True True False False False False False False True 2019-10-14 False False False True True False True True False False False False False 2019-11-04 False False False True True True False False False False False False False False False False True False True True True True False False 2019-11-20 False False False True True True True False False False False False False -USZ0133 56 True 2019-12-09 University Hospital Zurich 0 2 False True male 8 right False True hypopharynx c C12 4 False False False False False False True True True False False False False False False False True True False True True False False False False False True True 2020-05-29 True True True True True False False False False False False False True False False False False False 2020-04-23 False False False True True False True False False False False False False False False False False False False True True True False False 2020-06-02 False False False True True False True True False False False False False -USZ0199 79 2021-07-01 University Hospital Zurich 0 2 False True male 8 left False True larynx c C32.0 3 False False False False False False False False True False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False 2021-06-21 False False False False False False False False False False False False False False False False 2021-06-29 False False False False False False False False False False False True False False 2021-06-28 False False False False False False True False False False False False False False False False False False False False False True False False 2021-07-23 False False False False False False True False False False False False False -USZ0219 77 True 2018-01-17 University Hospital Zurich 0 2 True True male 8 right False True larynx p C32.8 4 False False False False False False False False True False False False False False False False True True False False False False False False False False False False False False False False False False False False False False False 2018-05-07 False False False True True False False False False False False False False False 2018-02-07 True False False False False False False False False False True False False 2018-05-25 False False False True True False False False False False False False False 2018-06-07 -USZ0274 39 True 2017-09-06 False University Hospital Zurich 0 0 False True male 8 right False True larynx c C32.1 3 False False False True True False False False True False False False False False False False True True False False False False False False False False False False False True True False False False False False False False False 2017-08-30 False False False True True False False False False False False False False False False False False 2017-09-07 False False False True True True True False True False False 2017-11-22 False False False True True False False False False False False False False -USZ0308 63 True 2013-01-16 False University Hospital Zurich 1 2 False True male 8 left False True hypopharynx c C12 3 False False False False False False False False False False False False False False False False True False False True False False False False False False 2013-01-18 True True False False False False False False False False False False False False False 2013-01-09 False False False False False False True False False False False False False False False False False False False False False False False False False False 2013-01-25 False False False True True False True False False False False False False False False False False False False False False False False False False False 2013-02-07 False False False False False False True False False False False False False ---------- ------- ------------- ------------- ------------- ---------- ----------------------------------- ------- ------- --------------- -------------- ---------- ------- ----------- ------- -------------- ---------- --------- ---------- ------------ ---------- ---------- ---------- ------------- ------- -------- ------- --------- ----------- ------------ ------- ------- ------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ---- ---- ---- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------- ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ ------------------ --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- diff --git a/scripts/old.py b/scripts/old.py deleted file mode 100644 index 5fc96cc..0000000 --- a/scripts/old.py +++ /dev/null @@ -1,37 +0,0 @@ -# /// script -# requires-python = ">=3.10" -# dependencies = [ -# "lydata==0.3.3", -# ] -# /// - -"""Get all datasets and enhance them using the old lydata package.""" - -import pandas as pd -from loguru import logger - -import lydata - -logger.enable("lydata") - - -def main() -> None: - """Run the main function to load and enhance datasets.""" - full_dataset = pd.DataFrame() - for dataset in lydata.load_datasets( - repo_name="lycosystem/lydata.private", - ref="ab04379a36b6946306041d1d38ad7e97df8ee7ba", - ): - full_dataset = pd.concat([full_dataset, dataset], ignore_index=True) - logger.info(f"Added {len(dataset)=} rows to the full dataset.") - - enhanced_dataset = lydata.infer_and_combine_levels(full_dataset) - added_cols = enhanced_dataset.shape[1] - full_dataset.shape[1] - logger.info(f"Enhanced dataset has {added_cols} new columns.") - - enhanced_dataset.to_csv("old.csv", index=False) - logger.success("Enhanced dataset saved to 'old.csv'.") - - -if __name__ == "__main__": - main() From 091218833abb59811db5127998ae72e2ff9236a3 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:13:41 +0200 Subject: [PATCH 77/78] docs: fix old data version in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0decae5..06ed695 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ The first and most common use case would probably listing and loading the publis >>> print(first_dataset.head()) ... # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE patient ... positive_dissected - # ... contra + core ... contra id institution sex ... III IV V 0 P011 Centre Léon Bérard male ... 0.0 0.0 0.0 1 P012 Centre Léon Bérard female ... 0.0 0.0 0.0 @@ -72,7 +72,7 @@ And since the three-level header of the tables is a little unwieldy at times, we ... 261 60 262 60 -Name: (patient, #, age), Length: 263, dtype: int64 +Name: (patient, core, age), Length: 263, dtype: int64 ``` From a8a5f58d178879ffe991c668f0cf77c4c9491591 Mon Sep 17 00:00:00 2001 From: Roman Ludwig <48687784+rmnldwg@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:20:20 +0200 Subject: [PATCH 78/78] ci: use env var for main tests, too --- .github/workflows/tests.yml | 3 ++- README.md | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fbfaedf..41d3ac3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -29,10 +29,11 @@ jobs: # Below, we first run pytest in the `tests/` folder. Because we use a `src` # layout, this will fail if the package is not installed correctly. - - name: Test package is installable + - name: Patient-specific and installation tests run: pytest --cov=lydata --cov-config=pyproject.toml tests env: COVERAGE_FILE: .coverage.is_installable + GITHUB_TOKEN: ${{ secrets.LYCOSYSTEM_READALL }} # Now, we execute all doctests in the `src` tree. This will NOT run with # the installed code, but it doesn't matter, because we already know it is diff --git a/README.md b/README.md index 06ed695..0decae5 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ The first and most common use case would probably listing and loading the publis >>> print(first_dataset.head()) ... # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE patient ... positive_dissected - core ... contra + # ... contra id institution sex ... III IV V 0 P011 Centre Léon Bérard male ... 0.0 0.0 0.0 1 P012 Centre Léon Bérard female ... 0.0 0.0 0.0 @@ -72,7 +72,7 @@ And since the three-level header of the tables is a little unwieldy at times, we ... 261 60 262 60 -Name: (patient, core, age), Length: 263, dtype: int64 +Name: (patient, #, age), Length: 263, dtype: int64 ```