diff --git a/.github/workflows/did_sim.yml b/.github/workflows/did_sim.yml index 75c3ffca..199220d3 100644 --- a/.github/workflows/did_sim.yml +++ b/.github/workflows/did_sim.yml @@ -19,6 +19,7 @@ jobs: script: [ 'scripts/did/did_pa_atte_coverage.py', 'scripts/did/did_cs_atte_coverage.py', + 'scripts/did/did_pa_multi.py', ] steps: @@ -48,20 +49,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.6.11" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -69,7 +77,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/.github/workflows/plr_sim.yml b/.github/workflows/plr_sim.yml index 7d95d3c4..973a5b4d 100644 --- a/.github/workflows/plr_sim.yml +++ b/.github/workflows/plr_sim.yml @@ -50,20 +50,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.6.11" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }} + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -71,7 +78,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/.gitignore b/.gitignore index c18dd8d8..628f882c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ __pycache__/ + +# Logs +monte-cover/logs/ +*.log \ No newline at end of file diff --git a/doc/_website.yml b/doc/_website.yml index 6dd3260f..4beb1519 100644 --- a/doc/_website.yml +++ b/doc/_website.yml @@ -25,6 +25,7 @@ website: - plm/pliv.qmd - text: "DID" menu: + - did/did_multi.qmd - did/did_pa.qmd - did/did_cs.qmd - text: "SSM" diff --git a/doc/did/did_multi.qmd b/doc/did/did_multi.qmd new file mode 100644 index 00000000..0cfed2e0 --- /dev/null +++ b/doc/did/did_multi.qmd @@ -0,0 +1,312 @@ +--- +title: "DiD for Panel Data over Multiple Periods" + +jupyter: python3 +--- + +```{python} +#| echo: false + +import numpy as np +import pandas as pd +from itables import init_notebook_mode, show, options + +init_notebook_mode(all_interactive=True) + +def highlight_range(s, level=0.95, dist=0.05, props=''): + color_grid = np.where((s >= level-dist) & + (s <= level+dist), props, '') + return color_grid + + +def color_coverage(df, level): + # color coverage column order is important + styled_df = df.apply( + highlight_range, + level=level, + dist=1.0, + props='color:black;background-color:red', + subset=["Coverage", "Uniform Coverage"]) + styled_df = styled_df.apply( + highlight_range, + level=level, + dist=0.1, + props='color:black;background-color:yellow', + subset=["Coverage", "Uniform Coverage"]) + styled_df = styled_df.apply( + highlight_range, + level=level, + dist=0.05, + props='color:white;background-color:darkgreen', + subset=["Coverage", "Uniform Coverage"]) + + # set all coverage values to bold + styled_df = styled_df.set_properties( + **{'font-weight': 'bold'}, + subset=["Coverage", "Uniform Coverage"]) + return styled_df + + +def make_pretty(df, level, n_rep): + styled_df = df.style.hide(axis="index") + # Format only float columns + float_cols = df.select_dtypes(include=['float']).columns + styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) + + # color coverage column order is important + styled_df = color_coverage(styled_df, level) + caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" + + return show(styled_df, caption=caption) +``` + +## ATTE Coverage + +The simulations are based on the the [make_did_CS2021](https://docs.doubleml.org/dev/api/generated/doubleml.did.datasets.make_did_CS2021.html)-DGP with $2000$ observations. Learners are both set to either boosting or a linear (logistic) model. Due to time constraints we only consider the following DGPs: + + - Type 1: Linear outcome model and treatment assignment + - Type 4: Nonlinear outcome model and treatment assignment + - Type 6: Randomized treatment assignment and nonlinear outcome model + +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). + +::: {.callout-note title="Metadata" collapse="true"} + +```{python} +#| echo: false +metadata_file = '../../results/did/did_multi_metadata.csv' +metadata_df = pd.read_csv(metadata_file) +print(metadata_df.T.to_string(header=False)) +``` + +::: + +```{python} +#| echo: false + +# set up data +df = pd.read_csv("../../results/did/did_multi_detailed.csv", index_col=None) + +assert df["repetition"].nunique() == 1 +n_rep = df["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +### Observational Score + +```{python} +#| echo: false +score = "observational" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "observational" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + + +### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +score = "experimental" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "experimental" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +## Aggregated Effects + +These simulations test different types of aggregation, as described in [DiD User Guide](https://docs.doubleml.org/dev/guide/models.html#difference-in-differences-models-did). + +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). + +### Group Effects + +```{python} +#| echo: false + +# set up data +df = pd.read_csv("../../results/did/did_multi_group.csv", index_col=None) + +assert df["repetition"].nunique() == 1 +n_rep = df["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +score = "observational" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "observational" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +score = "experimental" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "experimental" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +### Time Effects + +```{python} +#| echo: false + +# set up data +df = pd.read_csv("../../results/did/did_multi_time.csv", index_col=None) + +assert df["repetition"].nunique() == 1 +n_rep = df["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +score = "observational" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "observational" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +score = "experimental" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "experimental" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +### Event Study Aggregation + +```{python} +#| echo: false + +# set up data +df = pd.read_csv("../../results/did/did_multi_eventstudy.csv", index_col=None) + +assert df["repetition"].nunique() == 1 +n_rep = df["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +score = "observational" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "observational" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + + +```{python} +#| echo: false +score = "experimental" +level = 0.95 + +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_95, level, n_rep) +``` + +```{python} +#| echo: false +score = "experimental" +level = 0.9 + +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] +make_pretty(df_ate_9, level, n_rep) +``` \ No newline at end of file diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 61d482cd..0a0dbcce 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -90,11 +90,11 @@ display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ### Partialling out ```{python} -#| echo: false +# | echo: false score = "partialling out" level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] +df_ate_95 = df[(df["level"] == level) & (df["Score"] == score)][display_columns] df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) make_pretty(df_ate_95, level, n_rep) ``` @@ -104,7 +104,7 @@ make_pretty(df_ate_95, level, n_rep) score = "partialling out" level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) make_pretty(df_ate_9, level, n_rep) ``` @@ -118,7 +118,7 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t score = "IV-type" level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] +df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_95, level, n_rep) ``` @@ -127,7 +127,7 @@ make_pretty(df_ate_95, level, n_rep) score = "IV-type" level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] +df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) ``` diff --git a/monte-cover/.python-version b/monte-cover/.python-version new file mode 100644 index 00000000..e4fba218 --- /dev/null +++ b/monte-cover/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/monte-cover/README.md b/monte-cover/README.md new file mode 100644 index 00000000..e69de29b diff --git a/monte-cover/pyproject.toml b/monte-cover/pyproject.toml new file mode 100644 index 00000000..357e36c3 --- /dev/null +++ b/monte-cover/pyproject.toml @@ -0,0 +1,49 @@ +[project] +name = "montecover" +version = "0.1.0" +description = "A Monte Carlo coverage simulation package" +readme = "README.md" +authors = [ + { name = "SvenKlaassen", email = "sven.klaassen@uni-hamburg.de" } +] +requires-python = ">=3.12" +dependencies = [ + "black>=25.1.0", + "doubleml[rdd]>=0.9.3", + "ipykernel>=6.29.5", + "itables>=2.2.5", + "joblib>=1.4.2", + "lightgbm>=4.6.0", + "numpy>=2.2.4", + "pandas>=2.2.3", + "pyyaml>=6.0.2", + "ruff>=0.11.0", + "scikit-learn>=1.5.2", +] + +[project.scripts] +monte-cover = "montecover:main" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.black] +line-length = 127 +target-version = ['py311', 'py312'] +preview = true + +[tool.ruff] +# max line length for black +line-length = 127 +target-version = "py312" + + +[tool.ruff.lint] +# all rules can be found here: https://beta.ruff.rs/docs/rules/ +select = ["E", "F", "W", "I"] +ignore = [ + # Use `is` and `is not` for type comparisons, or `isinstance()` for + # isinstance checks + "E721", +] diff --git a/monte-cover/src/montecover/__init__.py b/monte-cover/src/montecover/__init__.py new file mode 100644 index 00000000..8d60b6b8 --- /dev/null +++ b/monte-cover/src/montecover/__init__.py @@ -0,0 +1,13 @@ +"""Monte Carlo coverage simulation package for statistical methods.""" + +from importlib.metadata import version + +__version__ = version("montecover") + +from .base import BaseSimulation + +__all__ = ["BaseSimulation"] + + +def main() -> None: + print("Hello from monte-cover! Run your simulations here.") diff --git a/monte-cover/src/montecover/base.py b/monte-cover/src/montecover/base.py new file mode 100644 index 00000000..957f0feb --- /dev/null +++ b/monte-cover/src/montecover/base.py @@ -0,0 +1,341 @@ +import logging +import os +import sys +import time +import warnings +from abc import ABC, abstractmethod +from datetime import datetime +from itertools import product +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +import yaml +from joblib import Parallel, delayed, parallel_backend + + +class BaseSimulation(ABC): + """Abstract base class for simulation studies.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + # Load config first to get default values if needed + self.config_file = config_file + self.config = self._load_config(config_file) + + # Apply parameters from config + self.simulation_parameters = self.config.get("simulation_parameters", {}) + self.repetitions = self.simulation_parameters.get("repetitions", 20) + self.max_runtime = self.simulation_parameters.get("max_runtime", 5.5 * 3600) + self.random_seed = self.simulation_parameters.get("random_seed", 42) + self.default_n_jobs = self.simulation_parameters.get("n_jobs", 1) + self.suppress_warnings = suppress_warnings + + # Set up logging + self._setup_logging(log_level, log_file) + self.logger.info(f"Loaded configuration from {config_file}") + + # Results storage + self.results = dict() + self.result_summary = None + + # Timing + self.start_time = None + self.end_time = None + self.total_runtime = None + + # Set up environment + if suppress_warnings: + warnings.simplefilter(action="ignore", category=UserWarning) + + np.random.seed(self.random_seed) + self.logger.info(f"Initialized simulation with random seed {self.random_seed}") + + # Let child classes process any specific parameters + self.dgp_parameters = self.config.get("dgp_parameters", {}) + self.dml_parameters = self.config.get("dml_parameters", {}) + self.confidence_parameters = self.config.get("confidence_parameters", {}) + self._process_config_parameters() + + @abstractmethod + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the DoubleML simulation.""" + pass + + @abstractmethod + def run_single_rep(self, params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + pass + + @abstractmethod + def summarize_results(self) -> Dict[str, Any]: + """Summarize the simulation results.""" + pass + + def run_simulation(self, n_jobs=None): + """ + Run the full simulation. + + Parameters: + ----------- + n_jobs : int, optional (default=None) + Number of jobs to run in parallel. If None, uses the value from the configuration file. + If 1, runs sequentially. If > 1, runs in parallel with the specified number of workers. + If -1, uses all available CPU cores . + If -2, uses all available CPU cores except one. + """ + # Use n_jobs from parameter, or fall back to config value + n_jobs = n_jobs if n_jobs is not None else self.default_n_jobs + self._log_parameters(n_jobs=n_jobs) + + if n_jobs == 1: + for i_rep in range(self.repetitions): + rep_start_time = time.time() + self.logger.info(f"Starting repetition {i_rep + 1}/{self.repetitions}") + + if self._stop_simulation(): + break + + # Running actual simulation + self._process_repetition(i_rep) + + rep_end_time = time.time() + rep_duration = rep_end_time - rep_start_time + self.logger.info(f"Repetition {i_rep+1} completed in {rep_duration:.2f}s") + + else: + self.logger.info(f"Starting parallel execution with n_jobs={n_jobs}") + with parallel_backend("loky", inner_max_num_threads=1): + results = Parallel(n_jobs=n_jobs, verbose=10)( + delayed(self._process_repetition)(i_rep) + for i_rep in range(self.repetitions) + if not self._stop_simulation() + ) + + # Process results from parallel execution + for worker_results in results: + if worker_results: # Check if we have results + for result_name, result_list in worker_results.items(): + if result_name not in self.results: + self.results[result_name] = [] + self.results[result_name].extend(result_list) + + self._process_results() + + def save_results(self, output_path: str = "results", file_prefix: str = ""): + """Save the simulation results.""" + os.makedirs(output_path, exist_ok=True) + + metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [self.__class__.__name__], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M")], + "Total Runtime (minutes)": [self.total_runtime / 60], + "Python Version": [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], + "Config File": [self.config_file], + } + ) + + for df_name, df in self.result_summary.items(): + output_file = os.path.join(output_path, f"{file_prefix}_{df_name}.csv") + df.to_csv(output_file, index=False) + self.logger.info(f"Results saved to {output_file}") + + metadata_file = os.path.join(output_path, f"{file_prefix}_metadata.csv") + metadata.to_csv(metadata_file, index=False) + self.logger.info(f"Metadata saved to {metadata_file}") + + def save_config(self, output_path: str): + """Save the current configuration to a YAML file.""" + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + if not (output_path.endswith(".yaml") or output_path.endswith(".yml")): + output_path += ".yaml" + self.logger.warning(f"Adding .yaml extension to output path: {output_path}") + + with open(output_path, "w") as file: + yaml.dump(self.config, file) + + self.logger.info(f"Configuration saved to {output_path}") + + def _load_config(self, config_path: str) -> Dict[str, Any]: + """Load configuration from a YAML file.""" + if not os.path.exists(config_path): + raise FileNotFoundError(f"Config file not found: {config_path}") + + if config_path.endswith(".yaml") or config_path.endswith(".yml"): + with open(config_path, "r") as file: + config = yaml.safe_load(file) + else: + raise ValueError(f"Unsupported config file format: {config_path}. Use .yaml or .yml") + + return config + + def _process_config_parameters(self): + """ + Process any special configuration parameters. + Child classes should override this method to handle specific parameters. + """ + pass + + def _setup_logging(self, log_level: str, log_file: Optional[str]): + """Set up logging configuration.""" + level = getattr(logging, log_level.upper()) + self.logger = logging.getLogger(self.__class__.__name__) + self.logger.setLevel(level) + + # Clear any existing handlers + if self.logger.hasHandlers(): + self.logger.handlers.clear() + + # Console handler + ch = logging.StreamHandler() + ch.setLevel(level) + formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + ch.setFormatter(formatter) + self.logger.addHandler(ch) + + # File handler if specified + if log_file: + os.makedirs(os.path.dirname(log_file), exist_ok=True) + fh = logging.FileHandler(log_file) + fh.setLevel(level) + fh.setFormatter(formatter) + self.logger.addHandler(fh) + + def _log_parameters(self, n_jobs): + """Initialize timing and calculate parameter combination metrics.""" + self.start_time = time.time() + self.logger.info("Starting simulation") + self.logger.info(f"DGP Parameters: {self.dgp_parameters}") + self.logger.info(f"DML Parameters: {self.dml_parameters}") + self.logger.info(f"Confidence Parameters: {self.confidence_parameters}") + + # Calculate expected iterations + dgp_combinations = [len(v) for v in self.dgp_parameters.values()] + dml_combinations = [len(v) for v in self.dml_parameters.values()] + self.total_combinations = np.prod(dgp_combinations + dml_combinations) + self.total_iterations = self.total_combinations * self.repetitions + + self.logger.info(f"Total parameter combinations: {self.total_combinations}") + self.logger.info(f"Expected total iterations: {self.total_iterations}") + if n_jobs <= 1: + self.logger.info("Running simulation sequentially") + else: + self.logger.info(f"Running simulation in parallel with {n_jobs} workers") + + def _stop_simulation(self) -> bool: + """Check if simulation should be stopped based on criteria like runtime.""" + # Check if maximum runtime is exceeded + if self.max_runtime and time.time() - self.start_time > self.max_runtime: + self.logger.warning("Maximum runtime exceeded. Stopping the simulation.") + return True + return False + + def _process_repetition(self, i_rep): + """Process a single repetition with all parameter combinations.""" + if self.suppress_warnings: + warnings.simplefilter(action="ignore", category=UserWarning) + + i_param_comb = 0 + rep_results = {} + + # loop through all parameter combinations + for dgp_param_values in product(*self.dgp_parameters.values()): + dgp_params = dict(zip(self.dgp_parameters.keys(), dgp_param_values)) + dml_data = self._generate_dml_data(dgp_params) + + for dml_param_values in product(*self.dml_parameters.values()): + dml_params = dict(zip(self.dml_parameters.keys(), dml_param_values)) + i_param_comb += 1 + + comb_results = self._process_parameter_combination(i_rep, i_param_comb, dgp_params, dml_params, dml_data) + + # Merge results + for result_name, result_list in comb_results.items(): + if result_name not in rep_results: + rep_results[result_name] = [] + rep_results[result_name].extend(result_list) + + return rep_results + + def _process_parameter_combination(self, i_rep, i_param_comb, dgp_params, dml_params, dml_data): + """Process a single parameter combination.""" + # Log parameter combination + self.logger.debug( + f"Rep {i_rep+1}, Combo {i_param_comb}/{self.total_combinations}: " f"DGPs {dgp_params}, DML {dml_params}" + ) + param_start_time = time.time() + + try: + repetition_results = self.run_single_rep(dml_data, dml_params) + + # Log timing + param_duration = time.time() - param_start_time + self.logger.debug(f"Parameter combination completed in {param_duration:.2f}s") + + # Process results + if repetition_results is None: + return {} + + # Add metadata to results + processed_results = {} + for result_name, repetition_result in repetition_results.items(): + processed_results[result_name] = [] + for res in repetition_result: + res["repetition"] = i_rep + res.update(dgp_params) + processed_results[result_name].append(res) + + return processed_results + + except Exception as e: + self.logger.error( + f"Error: repetition {i_rep+1}, DGP parameters {dgp_params}, " f"DML parameters {dml_params}: {str(e)}" + ) + self.logger.exception("Exception details:") + return {} + + def _process_results(self): + """Process collected results and log completion metrics.""" + # Convert results to dataframes incrementally + for key, value in self.results.items(): + self.results[key] = pd.DataFrame(value) + + self.end_time = time.time() + self.total_runtime = self.end_time - self.start_time + self.logger.info(f"Simulation completed in {self.total_runtime:.2f}s") + + # Summarize results + self.logger.info("Summarizing results") + self.result_summary = self.summarize_results() + + @staticmethod + def _compute_coverage(thetas, oracle_thetas, confint, joint_confint=None): + """Compute coverage, CI length, and bias.""" + lower_bound = confint.iloc[:, 0] + upper_bound = confint.iloc[:, 1] + coverage_mask = (lower_bound < oracle_thetas) & (oracle_thetas < upper_bound) + + result_dict = { + "Coverage": np.mean(coverage_mask), + "CI Length": np.mean(upper_bound - lower_bound), + "Bias": np.mean(np.abs(thetas - oracle_thetas)), + } + + if joint_confint is not None: + joint_lower_bound = joint_confint.iloc[:, 0] + joint_upper_bound = joint_confint.iloc[:, 1] + joint_coverage_mark = (joint_lower_bound < oracle_thetas) & (oracle_thetas < joint_upper_bound) + + result_dict["Uniform Coverage"] = np.all(joint_coverage_mark) + result_dict["Uniform CI Length"] = np.mean(joint_upper_bound - joint_lower_bound) + + return result_dict diff --git a/monte-cover/src/montecover/did/__init__.py b/monte-cover/src/montecover/did/__init__.py new file mode 100644 index 00000000..5aecac30 --- /dev/null +++ b/monte-cover/src/montecover/did/__init__.py @@ -0,0 +1,5 @@ +"""Monte Carlo coverage simulations for DiD.""" + +from montecover.did.did_pa_multi import DIDMultiCoverageSimulation + +__all__ = ["DIDMultiCoverageSimulation"] diff --git a/monte-cover/src/montecover/did/did_pa_multi.py b/monte-cover/src/montecover/did/did_pa_multi.py new file mode 100644 index 00000000..2c4e601e --- /dev/null +++ b/monte-cover/src/montecover/did/did_pa_multi.py @@ -0,0 +1,185 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.did.datasets import make_did_CS2021 +from lightgbm import LGBMClassifier, LGBMRegressor +from sklearn.linear_model import LinearRegression, LogisticRegression + +from montecover.base import BaseSimulation + + +class DIDMultiCoverageSimulation(BaseSimulation): + """Simulation study for coverage properties of DoubleMLDIDMulti.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Additional results storage for aggregated results + self.results_aggregated = [] + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + + assert "learners" in self.dml_parameters, "No learners specified in the config file" + for learner in self.dml_parameters["learners"]: + assert "ml_g" in learner, "No ml_g specified in the config file" + assert "ml_m" in learner, "No ml_m specified in the config file" + + # Convert ml_g strings to actual objects + if learner["ml_g"][0] == "Linear": + learner["ml_g"] = ("Linear", LinearRegression()) + elif learner["ml_g"][0] == "LGBM": + learner["ml_g"] = ("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1)) + else: + raise ValueError(f"Unknown learner type: {learner['ml_g']}") + + # Convert ml_m strings to actual objects + if learner["ml_m"][0] == "Linear": + learner["ml_m"] = ("Linear", LogisticRegression()) + elif learner["ml_m"][0] == "LGBM": + learner["ml_m"] = ("LGBM", LGBMClassifier(n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1)) + else: + raise ValueError(f"Unknown learner type: {learner['ml_m']}") + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + # Oracle values + df_oracle = make_did_CS2021(n_obs=int(1e6), dgp_type=1) # does not depend on the DGP type + df_oracle["ite"] = df_oracle["y1"] - df_oracle["y0"] + self.oracle_values["detailed"] = df_oracle.groupby(["d", "t"])["ite"].mean().reset_index() + + # Oracle group aggregation + df_oracle_post_treatment = df_oracle[df_oracle["t"] >= df_oracle["d"]] + self.oracle_values["group"] = df_oracle_post_treatment.groupby("d")["ite"].mean() + + # Oracle time aggregation + self.oracle_values["time"] = df_oracle_post_treatment.groupby("t")["ite"].mean() + + # Oracle eventstudy aggregation + df_oracle["e"] = pd.to_datetime(df_oracle["t"]).values.astype("datetime64[M]") - pd.to_datetime( + df_oracle["d"] + ).values.astype("datetime64[M]") + self.oracle_values["eventstudy"] = df_oracle.groupby("e")["ite"].mean()[1:] + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_g_name, ml_g = dml_params["learners"]["ml_g"] + learner_m_name, ml_m = dml_params["learners"]["ml_m"] + score = dml_params["score"] + in_sample_normalization = dml_params["in_sample_normalization"] + + # Model + dml_model = dml.did.DoubleMLDIDMulti( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=None if score == "experimental" else ml_m, + gt_combinations="standard", + score=score, + in_sample_normalization=in_sample_normalization, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + # Oracle values for this model + oracle_thetas = np.full_like(dml_model.coef, np.nan) + for i, (g, _, t) in enumerate(dml_model.gt_combinations): + group_index = self.oracle_values["detailed"]["d"] == g + time_index = self.oracle_values["detailed"]["t"] == t + oracle_thetas[i] = self.oracle_values["detailed"][group_index & time_index]["ite"].iloc[0] + + result = { + "detailed": [], + "group": [], + "time": [], + "eventstudy": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["detailed"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=oracle_thetas, + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + + for aggregation_method in ["group", "time", "eventstudy"]: + agg_obj = dml_model.aggregate(aggregation=aggregation_method) + agg_obj.aggregated_frameworks.bootstrap(n_rep_boot=2000) + + level_result[aggregation_method] = self._compute_coverage( + thetas=agg_obj.aggregated_frameworks.thetas, + oracle_thetas=self.oracle_values[aggregation_method].values, + confint=agg_obj.aggregated_frameworks.confint(level=level), + joint_confint=agg_obj.aggregated_frameworks.confint(level=level, joint=True), + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "In-sample-norm.": in_sample_normalization, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + groupby_cols = ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.data.DoubleMLPanelData: + """Generate data for the simulation.""" + data = make_did_CS2021(n_obs=dgp_params["n_obs"], dgp_type=dgp_params["DGP"]) + dml_data = dml.data.DoubleMLPanelData( + data, + y_col="y", + d_cols="d", + id_col="id", + t_col="t", + x_cols=["Z1", "Z2", "Z3", "Z4"], + ) + return dml_data diff --git a/monte-cover/src/montecover/plm/__init__.py b/monte-cover/src/montecover/plm/__init__.py new file mode 100644 index 00000000..f861d2bb --- /dev/null +++ b/monte-cover/src/montecover/plm/__init__.py @@ -0,0 +1,5 @@ +"""Monte Carlo coverage simulations for PLM.""" + +from montecover.plm.plr_ate import PLRATECoverageSimulation + +__all__ = ["PLRATECoverageSimulation"] diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py new file mode 100644 index 00000000..ac7f1c3b --- /dev/null +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -0,0 +1,138 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_plr_CCDDHNR2018 +from lightgbm import LGBMRegressor +from sklearn.ensemble import RandomForestRegressor +from sklearn.linear_model import LassoCV + +from montecover.base import BaseSimulation + + +class PLRATECoverageSimulation(BaseSimulation): + """Simulation study for coverage properties of DoubleMLPLR for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Additional results storage for aggregated results + self.results_aggregated = [] + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + for learner in self.dml_parameters["learners"]: + assert "ml_g" in learner, "No ml_g specified in the config file" + assert "ml_m" in learner, "No ml_m specified in the config file" + + # Convert ml_g strings to actual objects + learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) + learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) + + def _convert_ml_string_to_object(self, ml_string): + """Convert a string to a machine learning object.""" + if ml_string == "Lasso": + learner = LassoCV() + elif ml_string == "Random Forest": + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) + elif ml_string == "LGBM": + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + else: + raise ValueError(f"Unknown learner type: {ml_string}") + + return (ml_string, learner) + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_g_name, ml_g = dml_params["learners"]["ml_g"] + learner_m_name, ml_m = dml_params["learners"]["ml_m"] + score = dml_params["score"] + + # Model + dml_model = dml.DoubleMLPLR( + obj_dml_data=dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g if score == "IV-type" else None, + score=score, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Score", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_plr_CCDDHNR2018( + alpha=dgp_params["theta"], n_obs=dgp_params["n_obs"], dim_x=dgp_params["dim_x"], return_type="DataFrame" + ) + dml_data = dml.DoubleMLData(data, "y", "d") + return dml_data diff --git a/monte-cover/uv.lock b/monte-cover/uv.lock new file mode 100644 index 00000000..57e1dd3c --- /dev/null +++ b/monte-cover/uv.lock @@ -0,0 +1,1140 @@ +version = 1 +revision = 1 +requires-python = ">=3.12" + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, +] + +[[package]] +name = "black" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 }, + { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 }, + { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 }, + { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 }, + { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673 }, + { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190 }, + { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926 }, + { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613 }, + { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +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/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 = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[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 } +wheels = [ + { 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 = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + +[[package]] +name = "contourpy" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, + { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, + { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, + { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, + { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, + { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, + { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, + { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, + { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, + { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "debugpy" +version = "1.8.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/ad/dff929b6b5403feaab0af0e5bb460fd723f9c62538b718a9af819b8fff20/debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", size = 2501004 }, + { url = "https://files.pythonhosted.org/packages/d6/4f/b7d42e6679f0bb525888c278b0c0d2b6dff26ed42795230bb46eaae4f9b3/debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", size = 4222346 }, + { url = "https://files.pythonhosted.org/packages/ec/18/d9b3e88e85d41f68f77235112adc31012a784e45a3fcdbb039777d570a0f/debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", size = 5226639 }, + { url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", size = 5268735 }, + { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416 }, + { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784 }, + { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270 }, + { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621 }, + { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "doubleml" +version = "0.9.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "plotly" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "statsmodels" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/c4/5798ab5c520868d31c625df3600e942612dea707a8da613a1a4341d47f1f/doubleml-0.9.3.tar.gz", hash = "sha256:a1f6337a5700856a3ab77af0b44449741d0fcb188b03ce7d15c0c0d0db0aca29", size = 226094 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/89/59665f3e7f1a2d99d6fd0babf61b2560c96686fe1fc17f8201f0a0c0baa0/DoubleML-0.9.3-py3-none-any.whl", hash = "sha256:c2ef19d8355babaf03392ae705353f309a684f4a8191cf8e2a7fed74db419808", size = 342917 }, +] + +[package.optional-dependencies] +rdd = [ + { name = "rdrobust" }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, +] + +[[package]] +name = "fonttools" +version = "4.56.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757 }, + { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007 }, + { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991 }, + { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109 }, + { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496 }, + { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094 }, + { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888 }, + { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734 }, + { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127 }, + { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519 }, + { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423 }, + { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442 }, + { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800 }, + { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746 }, + { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927 }, + { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709 }, + { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800 }, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipython" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "itables" +version = "2.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/359fc46f2874290843a4ba2c089d0109874cd2d73863d0e69fd54a5e9532/itables-2.2.5.tar.gz", hash = "sha256:838ed4783da0b6481b9062c362b8a331aa56f48d6c90e0f6dc76a0488a316049", size = 2436699 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/dd/8976761076632f492f0d25502e348f41f343423d36270dc32f323b9155bc/itables-2.2.5-py3-none-any.whl", hash = "sha256:d0d33ce427c6c84d4063998650323eb65ccddb47a5505ef1ad3f563580dc101d", size = 1407043 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "joblib" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, +] + +[[package]] +name = "lightgbm" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/75/cffc9962cca296bc5536896b7e65b4a7cdeb8db208e71b9c0133c08f8f7e/lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed", size = 2010151 }, + { url = "https://files.pythonhosted.org/packages/21/1b/550ee378512b78847930f5d74228ca1fdba2a7fbdeaac9aeccc085b0e257/lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad", size = 1592172 }, + { url = "https://files.pythonhosted.org/packages/64/41/4fbde2c3d29e25ee7c41d87df2f2e5eda65b431ee154d4d462c31041846c/lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336", size = 3454567 }, + { url = "https://files.pythonhosted.org/packages/42/86/dabda8fbcb1b00bcfb0003c3776e8ade1aa7b413dff0a2c08f457dace22f/lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d", size = 3569831 }, + { url = "https://files.pythonhosted.org/packages/5e/23/f8b28ca248bb629b9e08f877dd2965d1994e1674a03d67cd10c5246da248/lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b", size = 1451509 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 }, + { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 }, + { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 }, + { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 }, + { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 }, + { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 }, + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + +[[package]] +name = "mizani" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pandas" }, + { name = "scipy" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/c3/9f83c374314b2b42e7aec65f3bf87046415ab265f209fa8a04eb6da822ee/mizani-0.13.1.tar.gz", hash = "sha256:e3247ea12c746c8104767d7e42a2d16473173c7bc314f298d8294a58f4653353", size = 765181 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/85/16e17e75831ec01808c5f07e578f1552df87a4f5c827caa8be28f97b4c19/mizani-0.13.1-py3-none-any.whl", hash = "sha256:7da0dcacd43fbcc01c279ea06a76f1f064ae90dbb387c4a985ba24a92d3c7d7a", size = 127896 }, +] + +[[package]] +name = "montecover" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "black" }, + { name = "doubleml", extra = ["rdd"] }, + { name = "ipykernel" }, + { name = "itables" }, + { name = "joblib" }, + { name = "lightgbm" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pyyaml" }, + { name = "ruff" }, + { name = "scikit-learn" }, +] + +[package.metadata] +requires-dist = [ + { name = "black", specifier = ">=25.1.0" }, + { name = "doubleml", extras = ["rdd"], specifier = ">=0.9.3" }, + { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "itables", specifier = ">=2.2.5" }, + { name = "joblib", specifier = ">=1.4.2" }, + { name = "lightgbm", specifier = ">=4.6.0" }, + { name = "numpy", specifier = ">=2.2.4" }, + { name = "pandas", specifier = ">=2.2.3" }, + { name = "pyyaml", specifier = ">=6.0.2" }, + { name = "ruff", specifier = ">=0.11.0" }, + { name = "scikit-learn", specifier = ">=1.5.2" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, +] + +[[package]] +name = "narwhals" +version = "1.31.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/fa/c2b6a4d5dbc4af15aa58c86920d5275a9c65142318179b246685069f57da/narwhals-1.31.0.tar.gz", hash = "sha256:333472e2562343dfdd27407ec9b5114a07c81d0416794e4ac6b703dd925c6a1a", size = 253463 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/c0/fb39bd876ea2fd9509343d643690cd2f9715e6a77271e7c7b26f1eea70c1/narwhals-1.31.0-py3-none-any.whl", hash = "sha256:2a7b79bb5f511055c4c0142121fc0d4171ea171458e12d44dbd9c8fc6488e997", size = 313124 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "numpy" +version = "2.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156 }, + { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092 }, + { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515 }, + { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558 }, + { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742 }, + { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051 }, + { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972 }, + { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106 }, + { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190 }, + { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305 }, + { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, + { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, + { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, + { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, + { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, + { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, + { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, + { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, + { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, + { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, + { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, + { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, + { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, + { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, + { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, + { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, + { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, + { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, + { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, + { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, +] + +[[package]] +name = "patsy" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "pillow" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 }, + { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 }, + { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 }, + { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 }, + { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 }, + { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 }, + { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 }, + { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 }, + { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 }, + { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 }, + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, +] + +[[package]] +name = "plotly" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/cc/e41b5f697ae403f0b50e47b7af2e36642a193085f553bf7cc1169362873a/plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b", size = 8094643 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768", size = 14805757 }, +] + +[[package]] +name = "plotnine" +version = "0.14.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "mizani" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "scipy" }, + { name = "statsmodels" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/0e/618bfa724ad19418c83eb22cdc4332dc69bb67f47094bd013ffe15e188d2/plotnine-0.14.5.tar.gz", hash = "sha256:9e75969e8e10d8d770a4be36d10e075cc10b88ca6fcc99e36ada53436fb5653f", size = 6424617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/c5/7cfda7ba9fa02243367fbfb4880b6de8039266f22c47c2dbbd39b6adc46f/plotnine-0.14.5-py3-none-any.whl", hash = "sha256:4a8bc4360732dd69a0263def4abab285ed8f0f4386186f1e44c642f2cea79b88", size = 1301197 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +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 } +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 = "pytz" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930 }, +] + +[[package]] +name = "pywin32" +version = "310" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239 }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839 }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470 }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, +] + +[[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/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]] +name = "pyzmq" +version = "26.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/ed/c3876f3b3e8beba336214ce44e1efa1792dd537027cef24192ac2b077d7c/pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3", size = 276733 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/03/7170c3814bb9106c1bca67700c731aaf1cd990fd2f0097c754acb600330e/pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea", size = 1348354 }, + { url = "https://files.pythonhosted.org/packages/74/f3/908b17f9111cdc764aef1de3d36026a2984c46ed90c3c2c85f28b66142f0/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7", size = 671056 }, + { url = "https://files.pythonhosted.org/packages/02/ad/afcb8484b65ceacd1609f709c2caeed31bd6c49261a7507cd5c175cc105f/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d", size = 908597 }, + { url = "https://files.pythonhosted.org/packages/a1/b5/4eeeae0aaaa6ef0c74cfa8b2273b53382bd858df6d99485f2fc8211e7002/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00", size = 865260 }, + { url = "https://files.pythonhosted.org/packages/74/6a/63db856e93e3a3c3dc98a1de28a902cf1b21c7b0d3856cd5931d7cfd30af/pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695", size = 859916 }, + { url = "https://files.pythonhosted.org/packages/e1/ce/d522c9b46ee3746d4b98c81969c568c2c6296e931a65f2c87104b645654c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52", size = 1201368 }, + { url = "https://files.pythonhosted.org/packages/5a/56/29dcd3647a39e933eb489fda261a1e2700a59d4a9432889a85166e15651c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac", size = 1512663 }, + { url = "https://files.pythonhosted.org/packages/6b/36/7c570698127a43398ed1b1832dada59496e633115016addbce5eda9938a6/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66", size = 1411693 }, + { url = "https://files.pythonhosted.org/packages/de/54/51d39bef85a7cdbca36227f7defdbfcdc5011b8361a3bfc0e8df431f5a5d/pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37", size = 581244 }, + { url = "https://files.pythonhosted.org/packages/f2/6a/9512b11a1d0c5648534f03d5ab0c3222f55dc9c192029c1cb00a0ca044e2/pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495", size = 643559 }, + { url = "https://files.pythonhosted.org/packages/27/9f/faf5c9cf91b61eeb82a5e919d024d3ac28a795c92cce817be264ccd757d3/pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d", size = 557664 }, + { url = "https://files.pythonhosted.org/packages/37/16/97b8c5107bfccb39120e611671a452c9ff6e8626fb3f8d4c15afd652b6ae/pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd", size = 1345691 }, + { url = "https://files.pythonhosted.org/packages/a5/61/d5572d95040c0bb5b31eed5b23f3f0f992d94e4e0de0cea62e3c7f3a85c1/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597", size = 670622 }, + { url = "https://files.pythonhosted.org/packages/1c/0c/f0235d27388aacf4ed8bcc1d574f6f2f629da0a20610faa0a8e9d363c2b0/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4", size = 908683 }, + { url = "https://files.pythonhosted.org/packages/cb/52/664828f9586c396b857eec088d208230463e3dc991a24df6adbad98fbaa3/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9", size = 865212 }, + { url = "https://files.pythonhosted.org/packages/2b/14/213b2967030b7d7aecc32dd453830f98799b3cbf2b10a40232e9f22a6520/pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558", size = 860068 }, + { url = "https://files.pythonhosted.org/packages/aa/e5/ff50c8fade69d1c0469652832c626d1910668697642c10cb0e1b6183ef9a/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64", size = 1201303 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/fff5e483be95ccc11a05781323e001e63ec15daec1d0f6f08de72ca534db/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53", size = 1512892 }, + { url = "https://files.pythonhosted.org/packages/21/75/cc44d276e43136e5692e487c3c019f816e11ed445261e434217c28cc98c4/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36", size = 1411736 }, + { url = "https://files.pythonhosted.org/packages/ee/1c/d070cbc9a7961fe772641c51bb3798d88cb1f8e20ca718407363462624cf/pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14", size = 581214 }, + { url = "https://files.pythonhosted.org/packages/38/d3/91082f1151ff5b54e0bed40eb1a26f418530ab07ecaec4dbb83e3d9fa9a9/pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca", size = 643412 }, + { url = "https://files.pythonhosted.org/packages/e0/cf/dabe68dfdf3e67bea6152eeec4b251cf899ee5b853cfb5c97e4719f9e6e9/pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce", size = 557444 }, + { url = "https://files.pythonhosted.org/packages/c0/56/e7576ac71c1566da4f4ec586351462a2bb202143fb074bf56df8fe85dcc3/pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464", size = 1340288 }, + { url = "https://files.pythonhosted.org/packages/f1/ab/0bca97e94d420b5908968bc479e51c3686a9f80d8893450eefcd673b1b1d/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825", size = 662462 }, + { url = "https://files.pythonhosted.org/packages/ee/be/99e89b55863808da322ac3ab52d8e135dcf2241094aaa468bfe2923d5194/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52", size = 896464 }, + { url = "https://files.pythonhosted.org/packages/38/d4/a4be06a313c8d6a5fe1d92975db30aca85f502e867fca392532e06a28c3c/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557", size = 853432 }, + { url = "https://files.pythonhosted.org/packages/12/e6/e608b4c34106bbf5b3b382662ea90a43b2e23df0aa9c1f0fd4e21168d523/pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046", size = 845884 }, + { url = "https://files.pythonhosted.org/packages/c3/a9/d5e6355308ba529d9cd3576ee8bb3b2e2b726571748f515fbb8559401f5b/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981", size = 1191454 }, + { url = "https://files.pythonhosted.org/packages/6a/9a/a21dc6c73ac242e425709c1e0049368d8f5db5de7c1102a45f93f5c492b3/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3", size = 1500397 }, + { url = "https://files.pythonhosted.org/packages/87/88/0236056156da0278c9ca2e2562463643597808b5bbd6c34009ba217e7e92/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f", size = 1398401 }, +] + +[[package]] +name = "rdrobust" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "plotnine" }, + { name = "scikit-learn" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/8a/e8ae926da333a82d597c874a59f888838616651de6bc815d9d78c2f76c64/rdrobust-1.3.0.tar.gz", hash = "sha256:994528ca6c7351b2ef8a1f9f57a524d8caa9d40f5f40f8a16c6533bd53109d53", size = 29187 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/d6/c2faba19eea47e62c9cb07abd9a4ef735d43d1f85ba562eb549b7540af12/rdrobust-1.3.0-py3-none-any.whl", hash = "sha256:611ae2c07dc4e7969596800987953747c7dd9a68c0536c86cb1c53af90b9a2de", size = 30285 }, +] + +[[package]] +name = "ruff" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/77/2b/7ca27e854d92df5e681e6527dc0f9254c9dc06c8408317893cf96c851cdd/ruff-0.11.0.tar.gz", hash = "sha256:e55c620690a4a7ee6f1cccb256ec2157dc597d109400ae75bbf944fc9d6462e2", size = 3799407 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/40/3d0340a9e5edc77d37852c0cd98c5985a5a8081fc3befaeb2ae90aaafd2b/ruff-0.11.0-py3-none-linux_armv6l.whl", hash = "sha256:dc67e32bc3b29557513eb7eeabb23efdb25753684b913bebb8a0c62495095acb", size = 10098158 }, + { url = "https://files.pythonhosted.org/packages/ec/a9/d8f5abb3b87b973b007649ac7bf63665a05b2ae2b2af39217b09f52abbbf/ruff-0.11.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38c23fd9bdec4eb437b4c1e3595905a0a8edfccd63a790f818b28c78fe345639", size = 10879071 }, + { url = "https://files.pythonhosted.org/packages/ab/62/aaa198614c6211677913ec480415c5e6509586d7b796356cec73a2f8a3e6/ruff-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c8661b0be91a38bd56db593e9331beaf9064a79028adee2d5f392674bbc5e88", size = 10247944 }, + { url = "https://files.pythonhosted.org/packages/9f/52/59e0a9f2cf1ce5e6cbe336b6dd0144725c8ea3b97cac60688f4e7880bf13/ruff-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6c0e8d3d2db7e9f6efd884f44b8dc542d5b6b590fc4bb334fdbc624d93a29a2", size = 10421725 }, + { url = "https://files.pythonhosted.org/packages/a6/c3/dcd71acc6dff72ce66d13f4be5bca1dbed4db678dff2f0f6f307b04e5c02/ruff-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c3156d3f4b42e57247275a0a7e15a851c165a4fc89c5e8fa30ea6da4f7407b8", size = 9954435 }, + { url = "https://files.pythonhosted.org/packages/a6/9a/342d336c7c52dbd136dee97d4c7797e66c3f92df804f8f3b30da59b92e9c/ruff-0.11.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:490b1e147c1260545f6d041c4092483e3f6d8eba81dc2875eaebcf9140b53905", size = 11492664 }, + { url = "https://files.pythonhosted.org/packages/84/35/6e7defd2d7ca95cc385ac1bd9f7f2e4a61b9cc35d60a263aebc8e590c462/ruff-0.11.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1bc09a7419e09662983b1312f6fa5dab829d6ab5d11f18c3760be7ca521c9329", size = 12207856 }, + { url = "https://files.pythonhosted.org/packages/22/78/da669c8731bacf40001c880ada6d31bcfb81f89cc996230c3b80d319993e/ruff-0.11.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfa478daf61ac8002214eb2ca5f3e9365048506a9d52b11bea3ecea822bb844", size = 11645156 }, + { url = "https://files.pythonhosted.org/packages/ee/47/e27d17d83530a208f4a9ab2e94f758574a04c51e492aa58f91a3ed7cbbcb/ruff-0.11.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fbb2aed66fe742a6a3a0075ed467a459b7cedc5ae01008340075909d819df1e", size = 13884167 }, + { url = "https://files.pythonhosted.org/packages/9f/5e/42ffbb0a5d4b07bbc642b7d58357b4e19a0f4774275ca6ca7d1f7b5452cd/ruff-0.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c0c1ff014351c0b0cdfdb1e35fa83b780f1e065667167bb9502d47ca41e6db", size = 11348311 }, + { url = "https://files.pythonhosted.org/packages/c8/51/dc3ce0c5ce1a586727a3444a32f98b83ba99599bb1ebca29d9302886e87f/ruff-0.11.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e4fd5ff5de5f83e0458a138e8a869c7c5e907541aec32b707f57cf9a5e124445", size = 10305039 }, + { url = "https://files.pythonhosted.org/packages/60/e0/475f0c2f26280f46f2d6d1df1ba96b3399e0234cf368cc4c88e6ad10dcd9/ruff-0.11.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:96bc89a5c5fd21a04939773f9e0e276308be0935de06845110f43fd5c2e4ead7", size = 9937939 }, + { url = "https://files.pythonhosted.org/packages/e2/d3/3e61b7fd3e9cdd1e5b8c7ac188bec12975c824e51c5cd3d64caf81b0331e/ruff-0.11.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a9352b9d767889ec5df1483f94870564e8102d4d7e99da52ebf564b882cdc2c7", size = 10923259 }, + { url = "https://files.pythonhosted.org/packages/30/32/cd74149ebb40b62ddd14bd2d1842149aeb7f74191fb0f49bd45c76909ff2/ruff-0.11.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:049a191969a10897fe052ef9cc7491b3ef6de79acd7790af7d7897b7a9bfbcb6", size = 11406212 }, + { url = "https://files.pythonhosted.org/packages/00/ef/033022a6b104be32e899b00de704d7c6d1723a54d4c9e09d147368f14b62/ruff-0.11.0-py3-none-win32.whl", hash = "sha256:3191e9116b6b5bbe187447656f0c8526f0d36b6fd89ad78ccaad6bdc2fad7df2", size = 10310905 }, + { url = "https://files.pythonhosted.org/packages/ed/8a/163f2e78c37757d035bd56cd60c8d96312904ca4a6deeab8442d7b3cbf89/ruff-0.11.0-py3-none-win_amd64.whl", hash = "sha256:c58bfa00e740ca0a6c43d41fb004cd22d165302f360aaa56f7126d544db31a21", size = 11411730 }, + { url = "https://files.pythonhosted.org/packages/4e/f7/096f6efabe69b49d7ca61052fc70289c05d8d35735c137ef5ba5ef423662/ruff-0.11.0-py3-none-win_arm64.whl", hash = "sha256:868364fc23f5aa122b00c6f794211e85f7e78f5dffdf7c590ab90b8c4e69b657", size = 10538956 }, +] + +[[package]] +name = "scikit-learn" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, + { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, + { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, + { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, + { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, + { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, + { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, + { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, + { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, + { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, +] + +[[package]] +name = "scipy" +version = "1.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 }, + { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 }, + { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 }, + { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 }, + { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 }, + { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 }, + { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 }, + { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 }, + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +] + +[[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 } +wheels = [ + { 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 = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "statsmodels" +version = "0.14.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "patsy" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/3b/963a015dd8ea17e10c7b0e2f14d7c4daec903baf60a017e756b57953a4bf/statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67", size = 20354802 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/99/654fd41a9024643ee70b239e5ebc987bf98ce9fc2693bd550bee58136564/statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199", size = 10220508 }, + { url = "https://files.pythonhosted.org/packages/67/d8/ac30cf4cf97adaa48548be57e7cf02e894f31b45fd55bf9213358d9781c9/statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb", size = 9912317 }, + { url = "https://files.pythonhosted.org/packages/e0/77/2440d551eaf27f9c1d3650e13b3821a35ad5b21d3a19f62fb302af9203e8/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245", size = 10301662 }, + { url = "https://files.pythonhosted.org/packages/fa/e1/60a652f18996a40a7410aeb7eb476c18da8a39792c7effe67f06883e9852/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f", size = 10741763 }, + { url = "https://files.pythonhosted.org/packages/81/0c/2453eec3ac25e300847d9ed97f41156de145e507391ecb5ac989e111e525/statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9", size = 10879534 }, + { url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184", size = 9823866 }, + { url = "https://files.pythonhosted.org/packages/31/f8/2662e6a101315ad336f75168fa9bac71f913ebcb92a6be84031d84a0f21f/statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79", size = 10186886 }, + { url = "https://files.pythonhosted.org/packages/fa/c0/ee6e8ed35fc1ca9c7538c592f4974547bf72274bc98db1ae4a6e87481a83/statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092", size = 9880066 }, + { url = "https://files.pythonhosted.org/packages/d1/97/3380ca6d8fd66cfb3d12941e472642f26e781a311c355a4e97aab2ed0216/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c", size = 10283521 }, + { url = "https://files.pythonhosted.org/packages/fe/2a/55c5b5c5e5124a202ea3fe0bcdbdeceaf91b4ec6164b8434acb9dd97409c/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72", size = 10723228 }, + { url = "https://files.pythonhosted.org/packages/4f/76/67747e49dc758daae06f33aad8247b718cd7d224f091d2cd552681215bb2/statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7", size = 10859503 }, + { url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0", size = 9817574 }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, +] + +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "tzdata" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] diff --git a/results/did/did_cs_atte_coverage_metadata.csv b/results/did/did_cs_atte_coverage_metadata.csv index d6308e55..286a49ba 100644 --- a/results/did/did_cs_atte_coverage_metadata.csv +++ b/results/did/did_cs_atte_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,did_cs_atte_coverage.py,2025-01-08 16:52:06,16598.133431196213,3.12.8 +0.10.dev0,did_cs_atte_coverage.py,2025-04-24 11:00:22,12399.906484365463,3.12.3 diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv new file mode 100644 index 00000000..4b6d8700 --- /dev/null +++ b/results/did/did_multi_detailed.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,experimental,False,1,0.9,0.4075,0.6680449671616123,0.4536971478292392,0.106,1.0014645995766545,1000 +LGBM,LGBM,experimental,False,1,0.95,0.4969166666666667,0.796024676138938,0.4536971478292392,0.149,1.1101910211253438,1000 +LGBM,LGBM,experimental,False,4,0.9,0.5299166666666666,0.5832956540561086,0.33011501262366927,0.221,0.8979294468476701,1000 +LGBM,LGBM,experimental,False,4,0.95,0.6176666666666666,0.695039640948207,0.33011501262366927,0.302,0.9884075405086947,1000 +LGBM,LGBM,experimental,False,6,0.9,0.89775,0.5802322315200278,0.1421029922499711,0.891,0.8927725918322601,1000 +LGBM,LGBM,experimental,False,6,0.95,0.9469166666666666,0.69138934785114,0.1421029922499711,0.948,0.9827083539024966,1000 +LGBM,LGBM,experimental,True,1,0.9,0.4046666666666667,0.6678639885704151,0.45277355982980805,0.085,1.0010411944316,1000 +LGBM,LGBM,experimental,True,1,0.95,0.4968333333333333,0.7958090268465587,0.45277355982980805,0.143,1.1099170693556415,1000 +LGBM,LGBM,experimental,True,4,0.9,0.5294166666666666,0.5833160278609535,0.32982215913570107,0.212,0.8981881991531053,1000 +LGBM,LGBM,experimental,True,4,0.95,0.6166666666666666,0.6950639178340466,0.32982215913570107,0.297,0.9891633208675981,1000 +LGBM,LGBM,experimental,True,6,0.9,0.89975,0.580193622985627,0.14218113073558258,0.901,0.8924214431904512,1000 +LGBM,LGBM,experimental,True,6,0.95,0.9490833333333334,0.691343342944879,0.14218113073558258,0.941,0.9821856487700115,1000 +LGBM,LGBM,observational,False,1,0.9,0.9114166666666667,2.745442581507895,0.7067512182439725,0.956,4.267995889646912,1000 +LGBM,LGBM,observational,False,1,0.95,0.9645833333333333,3.271396611351424,0.7067512182439725,0.987,4.685018272931908,1000 +LGBM,LGBM,observational,False,4,0.9,0.90725,3.522756602113769,0.964041513740829,0.962,5.420041663733542,1000 +LGBM,LGBM,observational,False,4,0.95,0.9638333333333333,4.197623395365736,0.964041513740829,0.992,5.964308172387913,1000 +LGBM,LGBM,observational,False,6,0.9,0.9243333333333333,2.1873521785120444,0.5149849766795307,0.961,3.4127245573450833,1000 +LGBM,LGBM,observational,False,6,0.95,0.96975,2.6063908794939334,0.5149849766795307,0.983,3.744841077573908,1000 +LGBM,LGBM,observational,True,1,0.9,0.9086666666666666,1.1201454805349786,0.27275770285583456,0.928,1.746888265672863,1000 +LGBM,LGBM,observational,True,1,0.95,0.9575833333333333,1.334735664815871,0.27275770285583456,0.973,1.916447134945182,1000 +LGBM,LGBM,observational,True,4,0.9,0.9208333333333334,1.415823117191095,0.3279182075028663,0.928,2.1893552276764523,1000 +LGBM,LGBM,observational,True,4,0.95,0.9615833333333333,1.6870572996314692,0.3279182075028663,0.968,2.408008384167633,1000 +LGBM,LGBM,observational,True,6,0.9,0.9035833333333334,1.0342009611787182,0.25272266117158226,0.925,1.6169600815502123,1000 +LGBM,LGBM,observational,True,6,0.95,0.9551666666666666,1.2323264535360365,0.25272266117158226,0.979,1.7730857540946194,1000 +Linear,Linear,experimental,False,1,0.9,0.8538333333333333,0.29474516889634966,0.08084244811337131,0.777,0.45978521833536623,1000 +Linear,Linear,experimental,False,1,0.95,0.9159166666666666,0.3512105309483955,0.08084244811337131,0.87,0.5045503638584217,1000 +Linear,Linear,experimental,False,4,0.9,0.3103333333333333,0.9755748479295066,0.8059915763717771,0.042,1.4116936904642545,1000 +Linear,Linear,experimental,False,4,0.95,0.3874166666666667,1.16246913089087,0.8059915763717771,0.078,1.5738462873560166,1000 +Linear,Linear,experimental,False,6,0.9,0.905,0.9844757965076787,0.23586020264982355,0.904,1.421142814988169,1000 +Linear,Linear,experimental,False,6,0.95,0.9513333333333334,1.1730752652943266,0.23586020264982355,0.957,1.5854008375388589,1000 +Linear,Linear,experimental,True,1,0.9,0.8529166666666667,0.2947409209064057,0.08090529833241722,0.773,0.4595811381839562,1000 +Linear,Linear,experimental,True,1,0.95,0.9155,0.3512054691561725,0.08090529833241722,0.873,0.5044085624001035,1000 +Linear,Linear,experimental,True,4,0.9,0.30975,0.9755981107617252,0.8057657027853717,0.045,1.4127941326439093,1000 +Linear,Linear,experimental,True,4,0.95,0.38825,1.1624968502651534,0.8057657027853717,0.082,1.5745211647752397,1000 +Linear,Linear,experimental,True,6,0.9,0.90425,0.9845527716230539,0.23562373204232834,0.902,1.4213288951702785,1000 +Linear,Linear,experimental,True,6,0.95,0.9529166666666666,1.1731669868015593,0.23562373204232834,0.954,1.5855821588385934,1000 +Linear,Linear,observational,False,1,0.9,0.9013333333333333,0.3180945635163335,0.07688429889402026,0.893,0.4947430553763157,1000 +Linear,Linear,observational,False,1,0.95,0.9528333333333334,0.379033050694909,0.07688429889402026,0.939,0.543298878262958,1000 +Linear,Linear,observational,False,4,0.9,0.41125,1.2376859429116744,0.7929800095241654,0.179,1.7688886396548633,1000 +Linear,Linear,observational,False,4,0.95,0.517,1.4747937643389757,0.7929800095241654,0.271,1.9773822754488526,1000 +Linear,Linear,observational,False,6,0.9,0.9018333333333334,1.0288570593763655,0.2510929759491061,0.907,1.4841286685672213,1000 +Linear,Linear,observational,False,6,0.95,0.951,1.225958801790062,0.2510929759491061,0.952,1.6571596022563468,1000 +Linear,Linear,observational,True,1,0.9,0.9031666666666667,0.31609423050346813,0.07696990405262741,0.896,0.4919409315123034,1000 +Linear,Linear,observational,True,1,0.95,0.951,0.3766495068962009,0.07696990405262741,0.938,0.540169288119527,1000 +Linear,Linear,observational,True,4,0.9,0.4071666666666667,1.2320142323935404,0.7928492798685264,0.177,1.7614082912050193,1000 +Linear,Linear,observational,True,4,0.95,0.5160833333333333,1.4680355044159439,0.7928492798685264,0.27,1.9699921213258018,1000 +Linear,Linear,observational,True,6,0.9,0.8995833333333334,1.0226446037500223,0.25004589301052516,0.908,1.4775056202619612,1000 +Linear,Linear,observational,True,6,0.95,0.9493333333333334,1.2185562043286982,0.25004589301052516,0.958,1.6496021973448636,1000 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv new file mode 100644 index 00000000..001f0d32 --- /dev/null +++ b/results/did/did_multi_eventstudy.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,experimental,False,1,0.9,0.2773333333333333,0.6626045518107705,0.522867855758196,0.094,0.8719689840220125,1000 +LGBM,LGBM,experimental,False,1,0.95,0.36283333333333334,0.7895420214067043,0.522867855758196,0.158,0.9886637771221886,1000 +LGBM,LGBM,experimental,False,4,0.9,0.3938333333333333,0.5423717102556455,0.3757379581307739,0.194,0.7392960751600857,1000 +LGBM,LGBM,experimental,False,4,0.95,0.479,0.6462757542168954,0.3757379581307739,0.264,0.8306962596909588,1000 +LGBM,LGBM,experimental,False,6,0.9,0.8956666666666666,0.5400804810404962,0.13314000614919386,0.898,0.7351650544241372,1000 +LGBM,LGBM,experimental,False,6,0.95,0.9466666666666667,0.6435455862138364,0.13314000614919386,0.947,0.8273243164555155,1000 +LGBM,LGBM,experimental,True,1,0.9,0.2768333333333333,0.6622937180897325,0.5217226242176525,0.091,0.8717138733867956,1000 +LGBM,LGBM,experimental,True,1,0.95,0.3658333333333333,0.7891716401834556,0.5217226242176525,0.152,0.9876529061875685,1000 +LGBM,LGBM,experimental,True,4,0.9,0.3933333333333333,0.5423615108665333,0.375147127868488,0.204,0.7392089258951966,1000 +LGBM,LGBM,experimental,True,4,0.95,0.48483333333333334,0.6462636008951672,0.375147127868488,0.262,0.8313951598985703,1000 +LGBM,LGBM,experimental,True,6,0.9,0.8941666666666667,0.5400583613596837,0.13242666462844116,0.902,0.7355833403327472,1000 +LGBM,LGBM,experimental,True,6,0.95,0.9496666666666667,0.6435192289884688,0.13242666462844116,0.951,0.8267752210686313,1000 +LGBM,LGBM,observational,False,1,0.9,0.9066666666666666,2.6785002267926212,0.7027830335731305,0.935,3.7134051819110248,1000 +LGBM,LGBM,observational,False,1,0.95,0.9621666666666666,3.191629875799755,0.7027830335731305,0.984,4.160656505059937,1000 +LGBM,LGBM,observational,False,4,0.9,0.9005,3.580959271775508,1.0129156667143928,0.947,4.897774689889189,1000 +LGBM,LGBM,observational,False,4,0.95,0.9635,4.266976153855569,1.0129156667143928,0.984,5.498501266877488,1000 +LGBM,LGBM,observational,False,6,0.9,0.9366666666666666,2.047082334441657,0.4715072811284397,0.958,2.853576675766446,1000 +LGBM,LGBM,observational,False,6,0.95,0.9741666666666666,2.439249051193658,0.4715072811284397,0.987,3.1892914408734887,1000 +LGBM,LGBM,observational,True,1,0.9,0.9201666666666666,1.0641709628573668,0.25287090705292425,0.932,1.4824539176803035,1000 +LGBM,LGBM,observational,True,1,0.95,0.9665,1.2680379131724926,0.25287090705292425,0.978,1.6577133825348924,1000 +LGBM,LGBM,observational,True,4,0.9,0.9326666666666666,1.3943564202709642,0.30856807690289556,0.944,1.9168017330682388,1000 +LGBM,LGBM,observational,True,4,0.95,0.9703333333333334,1.6614781525626372,0.30856807690289556,0.971,2.148511682362267,1000 +LGBM,LGBM,observational,True,6,0.9,0.9151666666666667,0.9573320328321949,0.22907488070446952,0.913,1.3370821918396925,1000 +LGBM,LGBM,observational,True,6,0.95,0.9591666666666666,1.1407314759521614,0.22907488070446952,0.962,1.4957947189981935,1000 +Linear,Linear,experimental,False,1,0.9,0.817,0.21006790406781498,0.06498524801296603,0.737,0.29976758759741007,1000 +Linear,Linear,experimental,False,1,0.95,0.8856666666666666,0.25031134657484,0.06498524801296603,0.833,0.33300535734848774,1000 +Linear,Linear,experimental,False,4,0.9,0.18933333333333333,0.9734427949194336,0.942138101911535,0.038,1.2558595558187573,1000 +Linear,Linear,experimental,False,4,0.95,0.24733333333333332,1.1599286330347671,0.942138101911535,0.069,1.4288651478016126,1000 +Linear,Linear,experimental,False,6,0.9,0.9065,0.9849523054847754,0.23403368036933778,0.906,1.2670326741245848,1000 +Linear,Linear,experimental,False,6,0.95,0.952,1.1736430607614226,0.23403368036933778,0.955,1.4435472811359242,1000 +Linear,Linear,experimental,True,1,0.9,0.8145,0.21006532690992177,0.06500905435434473,0.734,0.29970221642180794,1000 +Linear,Linear,experimental,True,1,0.95,0.8853333333333334,0.25030827570180275,0.06500905435434473,0.834,0.33296575349616914,1000 +Linear,Linear,experimental,True,4,0.9,0.189,0.9734779604068052,0.9419454231659742,0.038,1.25555326975786,1000 +Linear,Linear,experimental,True,4,0.95,0.24633333333333332,1.1599705352974472,0.9419454231659742,0.066,1.4299298399327454,1000 +Linear,Linear,experimental,True,6,0.9,0.9061666666666667,0.9850538588038303,0.23377313789727483,0.912,1.2674797492572467,1000 +Linear,Linear,experimental,True,6,0.95,0.9508333333333334,1.1737640690047073,0.23377313789727483,0.95,1.4423184941823244,1000 +Linear,Linear,observational,False,1,0.9,0.9008333333333334,0.22585835702659715,0.055198305642099925,0.903,0.3219559925076124,1000 +Linear,Linear,observational,False,1,0.95,0.9493333333333334,0.2691268317898658,0.055198305642099925,0.951,0.3578971740736594,1000 +Linear,Linear,observational,False,4,0.9,0.3001666666666667,1.2881377082934642,0.9264616976612766,0.163,1.639263108397286,1000 +Linear,Linear,observational,False,4,0.95,0.4008333333333333,1.5349107507288475,0.9264616976612766,0.244,1.8723351782709725,1000 +Linear,Linear,observational,False,6,0.9,0.8998333333333334,1.0342754505626182,0.2518778497516304,0.909,1.3276970785481759,1000 +Linear,Linear,observational,False,6,0.95,0.9535,1.2324152131115282,0.2518778497516304,0.955,1.5123233523398487,1000 +Linear,Linear,observational,True,1,0.9,0.8995,0.22457078985998344,0.055139777813084254,0.904,0.32046882903257323,1000 +Linear,Linear,observational,True,1,0.95,0.9498333333333334,0.2675926008814802,0.055139777813084254,0.947,0.355693484257242,1000 +Linear,Linear,observational,True,4,0.9,0.2946666666666667,1.2826973392587848,0.9269334367870915,0.157,1.6336078115558887,1000 +Linear,Linear,observational,True,4,0.95,0.39716666666666667,1.5284281511857252,0.9269334367870915,0.246,1.8624810463087826,1000 +Linear,Linear,observational,True,6,0.9,0.9,1.0272584761953654,0.25114610536900006,0.903,1.3196383656761783,1000 +Linear,Linear,observational,True,6,0.95,0.9505,1.2240539724425055,0.25114610536900006,0.947,1.504218761028933,1000 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv new file mode 100644 index 00000000..4577e7d6 --- /dev/null +++ b/results/did/did_multi_group.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,experimental,False,1,0.9,0.3693333333333333,0.7090618838563275,0.5111796103100933,0.098,0.8834434530622941,1000 +LGBM,LGBM,experimental,False,1,0.95,0.457,0.8448993469067663,0.5111796103100933,0.15,1.0080037041506986,1000 +LGBM,LGBM,experimental,False,4,0.9,0.497,0.6087390167901283,0.36720880128006417,0.217,0.774260771043429,1000 +LGBM,LGBM,experimental,False,4,0.95,0.5726666666666667,0.7253572775981572,0.36720880128006417,0.294,0.877573878123127,1000 +LGBM,LGBM,experimental,False,6,0.9,0.8963333333333334,0.6042015023199375,0.1487014306219813,0.898,0.7683506574226486,1000 +LGBM,LGBM,experimental,False,6,0.95,0.946,0.7199504956236503,0.1487014306219813,0.95,0.8706934749916513,1000 +LGBM,LGBM,experimental,True,1,0.9,0.3693333333333333,0.7088276284561316,0.5100920077392831,0.095,0.8831117334680723,1000 +LGBM,LGBM,experimental,True,1,0.95,0.4593333333333333,0.8446202143809021,0.5100920077392831,0.149,1.0075868805021413,1000 +LGBM,LGBM,experimental,True,4,0.9,0.48733333333333334,0.608736701830607,0.3667881388739205,0.216,0.7745575652923691,1000 +LGBM,LGBM,experimental,True,4,0.95,0.5736666666666667,0.7253545191537504,0.3667881388739205,0.295,0.8778827366167912,1000 +LGBM,LGBM,experimental,True,6,0.9,0.899,0.604250930969376,0.1495234417868854,0.898,0.7682500838441857,1000 +LGBM,LGBM,experimental,True,6,0.95,0.9453333333333334,0.7200093934922003,0.1495234417868854,0.95,0.8709685843875979,1000 +LGBM,LGBM,observational,False,1,0.9,0.9,2.6971392785657455,0.6901553548374239,0.919,3.411470555576068,1000 +LGBM,LGBM,observational,False,1,0.95,0.9613333333333334,3.2138396758589907,0.6901553548374239,0.97,3.8678725516778805,1000 +LGBM,LGBM,observational,False,4,0.9,0.9003333333333333,3.5517665818725503,0.9862765905072444,0.937,4.473068863007264,1000 +LGBM,LGBM,observational,False,4,0.95,0.9633333333333334,4.232190918328146,0.9862765905072444,0.982,5.078528143642635,1000 +LGBM,LGBM,observational,False,6,0.9,0.9333333333333333,2.1375025707197612,0.47971143636998764,0.958,2.7140218542317642,1000 +LGBM,LGBM,observational,False,6,0.95,0.9773333333333334,2.5469914081273513,0.47971143636998764,0.984,3.078750950800444,1000 +LGBM,LGBM,observational,True,1,0.9,0.9256666666666666,1.1007812174115272,0.25632528420376455,0.937,1.3967609545848296,1000 +LGBM,LGBM,observational,True,1,0.95,0.9656666666666667,1.3116617221335285,0.25632528420376455,0.969,1.5846481814277837,1000 +LGBM,LGBM,observational,True,4,0.9,0.9343333333333333,1.429297891139419,0.31328855982491516,0.938,1.808718069226331,1000 +LGBM,LGBM,observational,True,4,0.95,0.9646666666666667,1.7031134831153947,0.31328855982491516,0.967,2.0527141926185926,1000 +LGBM,LGBM,observational,True,6,0.9,0.9136666666666666,1.0219925280244282,0.2348945180206688,0.936,1.3014898205564045,1000 +LGBM,LGBM,observational,True,6,0.95,0.9653333333333334,1.2177792081775416,0.2348945180206688,0.978,1.474241987153884,1000 +Linear,Linear,experimental,False,1,0.9,0.8226666666666667,0.26405110817914795,0.0758088186934543,0.776,0.3392838427555131,1000 +Linear,Linear,experimental,False,1,0.95,0.8933333333333334,0.31463630175299984,0.0758088186934543,0.874,0.38300653689933123,1000 +Linear,Linear,experimental,False,4,0.9,0.3053333333333333,1.0785313702835313,0.9123130979795715,0.045,1.3606427802370482,1000 +Linear,Linear,experimental,False,4,0.95,0.3843333333333333,1.2851493940346341,0.9123130979795715,0.079,1.5446620015837293,1000 +Linear,Linear,experimental,False,6,0.9,0.9056666666666666,1.0870764263273311,0.2607121561223498,0.901,1.3682204780882954,1000 +Linear,Linear,experimental,False,6,0.95,0.9513333333333334,1.29533145632717,0.2607121561223498,0.948,1.556289105889985,1000 +Linear,Linear,experimental,True,1,0.9,0.824,0.26405675304370047,0.07591124645446254,0.772,0.3393263236958688,1000 +Linear,Linear,experimental,True,1,0.95,0.8926666666666666,0.31464302802398175,0.07591124645446254,0.87,0.382883555108476,1000 +Linear,Linear,experimental,True,4,0.9,0.30466666666666664,1.0784761507853573,0.9121132500261275,0.044,1.3601992647180394,1000 +Linear,Linear,experimental,True,4,0.95,0.3833333333333333,1.285083595944219,0.9121132500261275,0.076,1.5456058645388697,1000 +Linear,Linear,experimental,True,6,0.9,0.905,1.0871122885581,0.2601381436753874,0.897,1.3681142199253378,1000 +Linear,Linear,experimental,True,6,0.95,0.9513333333333334,1.2953741888108152,0.2601381436753874,0.948,1.5560366914154038,1000 +Linear,Linear,observational,False,1,0.9,0.907,0.2838406291881686,0.06854380714075585,0.903,0.3644989223278674,1000 +Linear,Linear,observational,False,1,0.95,0.9536666666666667,0.3382169704602,0.06854380714075585,0.955,0.4119659171700313,1000 +Linear,Linear,observational,False,4,0.9,0.3896666666666666,1.3793090866961302,0.9060696880499091,0.182,1.727333391598365,1000 +Linear,Linear,observational,False,4,0.95,0.502,1.6435481487089234,0.9060696880499091,0.277,1.9678561123774285,1000 +Linear,Linear,observational,False,6,0.9,0.9006666666666666,1.1329773275418917,0.2756511834772872,0.897,1.4227222931693604,1000 +Linear,Linear,observational,False,6,0.95,0.95,1.3500257535973816,0.2756511834772872,0.956,1.6192696646621554,1000 +Linear,Linear,observational,True,1,0.9,0.905,0.28206805358565534,0.06847739799438014,0.903,0.3623012265377661,1000 +Linear,Linear,observational,True,1,0.95,0.9546666666666667,0.3361048163548895,0.06847739799438014,0.955,0.4091813447198787,1000 +Linear,Linear,observational,True,4,0.9,0.3823333333333333,1.372259681779957,0.9050872305577908,0.182,1.7192091248898727,1000 +Linear,Linear,observational,True,4,0.95,0.493,1.6351482646573883,0.9050872305577908,0.267,1.957658584559894,1000 +Linear,Linear,observational,True,6,0.9,0.901,1.127050772935463,0.2741295722587394,0.894,1.4170565606861187,1000 +Linear,Linear,observational,True,6,0.95,0.9463333333333334,1.3429638282134566,0.2741295722587394,0.955,1.6106885004026728,1000 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv new file mode 100644 index 00000000..7bdadd5c --- /dev/null +++ b/results/did/did_multi_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.dev0,DIDMultiCoverageSimulation,2025-04-28 13:09,156.835364429156,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv new file mode 100644 index 00000000..56028273 --- /dev/null +++ b/results/did/did_multi_time.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,experimental,False,1,0.9,0.11766666666666666,0.6731572956149301,0.5832820839737466,0.099,0.7989776290413337,1000 +LGBM,LGBM,experimental,False,1,0.95,0.1923333333333333,0.8021163912201231,0.5832820839737466,0.149,0.9224993978404457,1000 +LGBM,LGBM,experimental,False,4,0.9,0.23366666666666666,0.5447994479218712,0.4179640524001073,0.178,0.6614136904463536,1000 +LGBM,LGBM,experimental,False,4,0.95,0.319,0.64916858207206,0.4179640524001073,0.256,0.7590437921742824,1000 +LGBM,LGBM,experimental,False,6,0.9,0.8966666666666666,0.5401491345809801,0.13172564187495983,0.889,0.6572599396615105,1000 +LGBM,LGBM,experimental,False,6,0.95,0.947,0.6436273919529943,0.13172564187495983,0.944,0.7536910938049102,1000 +LGBM,LGBM,experimental,True,1,0.9,0.122,0.6728842898473247,0.5812558555265437,0.081,0.7992162215772003,1000 +LGBM,LGBM,experimental,True,1,0.95,0.189,0.8017910847835437,0.5812558555265437,0.146,0.9225442459658868,1000 +LGBM,LGBM,experimental,True,4,0.9,0.232,0.5447888656854911,0.41729708994692727,0.175,0.6612781336972435,1000 +LGBM,LGBM,experimental,True,4,0.95,0.3163333333333333,0.6491559725596747,0.41729708994692727,0.245,0.7593858569402892,1000 +LGBM,LGBM,experimental,True,6,0.9,0.895,0.5400820206526399,0.13313828900767166,0.898,0.657255686550692,1000 +LGBM,LGBM,experimental,True,6,0.95,0.9483333333333334,0.643547420774859,0.13313828900767166,0.949,0.7539574257806553,1000 +LGBM,LGBM,observational,False,1,0.9,0.9056666666666666,2.932074123585019,0.7666467112765889,0.927,3.627128157933152,1000 +LGBM,LGBM,observational,False,1,0.95,0.9603333333333334,3.4937818101659124,0.7666467112765889,0.971,4.134373063899901,1000 +LGBM,LGBM,observational,False,4,0.9,0.894,3.9470940097005456,1.1195205693916876,0.917,4.8219415231624065,1000 +LGBM,LGBM,observational,False,4,0.95,0.963,4.7032526030567565,1.1195205693916876,0.974,5.523120200075401,1000 +LGBM,LGBM,observational,False,6,0.9,0.94,2.0192816252583667,0.44586147823817046,0.951,2.520911291299334,1000 +LGBM,LGBM,observational,False,6,0.95,0.978,2.406122462996927,0.44586147823817046,0.981,2.872779021079969,1000 +LGBM,LGBM,observational,True,1,0.9,0.9186666666666666,1.1060802678030524,0.2591448910709429,0.936,1.3677990581020218,1000 +LGBM,LGBM,observational,True,1,0.95,0.9686666666666667,1.3179759301271605,0.2591448910709429,0.977,1.5635220501464264,1000 +LGBM,LGBM,observational,True,4,0.9,0.9393333333333334,1.4819923634298338,0.3238962695469174,0.942,1.8118202975608613,1000 +LGBM,LGBM,observational,True,4,0.95,0.9726666666666667,1.7659028196139692,0.3238962695469174,0.975,2.076024587088288,1000 +LGBM,LGBM,observational,True,6,0.9,0.9113333333333333,0.9380198886395359,0.22149912971044713,0.915,1.168142275483958,1000 +LGBM,LGBM,observational,True,6,0.95,0.959,1.117719636806323,0.22149912971044713,0.97,1.332778139436294,1000 +Linear,Linear,experimental,False,1,0.9,0.809,0.24421211418873565,0.0747953478696107,0.731,0.3129524804889013,1000 +Linear,Linear,experimental,False,1,0.95,0.8713333333333334,0.29099668235246956,0.0747953478696107,0.831,0.35399876781734435,1000 +Linear,Linear,experimental,False,4,0.9,0.043,0.9663538590791207,1.0689268228491702,0.028,1.108520717140313,1000 +Linear,Linear,experimental,False,4,0.95,0.06433333333333333,1.1514816449818062,1.0689268228491702,0.056,1.2879051357588465,1000 +Linear,Linear,experimental,False,6,0.9,0.9066666666666666,0.9649068007812591,0.2282038734944421,0.908,1.109649411051833,1000 +Linear,Linear,experimental,False,6,0.95,0.952,1.1497573686687854,0.2282038734944421,0.953,1.288897606292505,1000 +Linear,Linear,experimental,True,1,0.9,0.8106666666666666,0.2442280575242452,0.07485718090249471,0.728,0.3131318505282238,1000 +Linear,Linear,experimental,True,1,0.95,0.8726666666666666,0.2910156800084799,0.07485718090249471,0.82,0.3541142507514428,1000 +Linear,Linear,experimental,True,4,0.9,0.042666666666666665,0.9663449229057717,1.0688692022966637,0.03,1.1082765484152255,1000 +Linear,Linear,experimental,True,4,0.95,0.06566666666666666,1.1514709968744994,1.0688692022966637,0.058,1.2875170435425758,1000 +Linear,Linear,experimental,True,6,0.9,0.9076666666666666,0.9649155510560861,0.22794459905668404,0.904,1.1089614225796234,1000 +Linear,Linear,experimental,True,6,0.95,0.952,1.1497677952643406,0.22794459905668404,0.952,1.2880674463360156,1000 +Linear,Linear,observational,False,1,0.9,0.8943333333333334,0.2738229128603023,0.06635918882753755,0.895,0.3510261719057856,1000 +Linear,Linear,observational,False,1,0.95,0.9426666666666667,0.3262801252064697,0.06635918882753755,0.942,0.3962985772301901,1000 +Linear,Linear,observational,False,4,0.9,0.157,1.3476988150235807,1.0609716999786731,0.127,1.5178150153968673,1000 +Linear,Linear,observational,False,4,0.95,0.2353333333333333,1.6058821868235793,1.0609716999786731,0.199,1.7707432791400486,1000 +Linear,Linear,observational,False,6,0.9,0.9023333333333333,1.0120647290620877,0.2445371914010156,0.907,1.1635536083727016,1000 +Linear,Linear,observational,False,6,0.95,0.953,1.2059495060732854,0.2445371914010156,0.952,1.352300935685489,1000 +Linear,Linear,observational,True,1,0.9,0.8933333333333334,0.2716532701291881,0.06653792879408746,0.884,0.34799487649074823,1000 +Linear,Linear,observational,True,1,0.95,0.9446666666666667,0.32369483643510083,0.06653792879408746,0.937,0.3932733826041723,1000 +Linear,Linear,observational,True,4,0.9,0.15433333333333335,1.3420280358592838,1.0605559236011748,0.119,1.511075555942128,1000 +Linear,Linear,observational,True,4,0.95,0.233,1.5991250366770944,1.0605559236011748,0.186,1.7640803706984969,1000 +Linear,Linear,observational,True,6,0.9,0.9013333333333333,1.0055268502646775,0.2433058652713604,0.9,1.1573364189497195,1000 +Linear,Linear,observational,True,6,0.95,0.953,1.198159142986716,0.2433058652713604,0.955,1.3448712678433115,1000 diff --git a/results/did/did_pa_atte_coverage.csv b/results/did/did_pa_atte_coverage.csv index 890866ef..9119e34e 100644 --- a/results/did/did_pa_atte_coverage.csv +++ b/results/did/did_pa_atte_coverage.csv @@ -1,16 +1,16 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,experimental,False,1,0.9,0.051,2.162461753688773,2.169737683875206,1000 -LGBM,LGBM,experimental,False,1,0.95,0.094,2.576732109002647,2.169737683875206,1000 -LGBM,LGBM,experimental,False,2,0.9,0.377,2.1295044728560635,1.3213439323325022,1000 -LGBM,LGBM,experimental,False,2,0.95,0.475,2.5374610867049356,1.3213439323325022,1000 -LGBM,LGBM,experimental,False,3,0.9,0.47,1.8796286302073664,1.0014962629759643,1000 -LGBM,LGBM,experimental,False,3,0.95,0.584,2.239715655638386,1.0014962629759643,1000 -LGBM,LGBM,experimental,False,4,0.9,0.078,1.883011293050954,1.9173640236877347,1000 -LGBM,LGBM,experimental,False,4,0.95,0.122,2.243746347024319,1.9173640236877347,1000 -LGBM,LGBM,experimental,False,5,0.9,0.889,2.0642730548921726,0.5209994874770714,1000 -LGBM,LGBM,experimental,False,5,0.95,0.951,2.4597330580373264,0.5209994874770714,1000 -LGBM,LGBM,experimental,False,6,0.9,0.908,1.808638762699564,0.43376612813148785,1000 -LGBM,LGBM,experimental,False,6,0.95,0.948,2.155126011123672,0.43376612813148785,1000 +LGBM,LGBM,experimental,False,1,0.9,0.051,2.1624651397785515,2.1697505905302976,1000 +LGBM,LGBM,experimental,False,1,0.95,0.094,2.576736143777478,2.1697505905302976,1000 +LGBM,LGBM,experimental,False,2,0.9,0.378,2.1294819852681166,1.3213007503499328,1000 +LGBM,LGBM,experimental,False,2,0.95,0.475,2.537434291091179,1.3213007503499328,1000 +LGBM,LGBM,experimental,False,3,0.9,0.47,1.8796188347464011,1.0014962844281858,1000 +LGBM,LGBM,experimental,False,3,0.95,0.583,2.239703983626731,1.0014962844281858,1000 +LGBM,LGBM,experimental,False,4,0.9,0.078,1.8830006248174618,1.9173419242712182,1000 +LGBM,LGBM,experimental,False,4,0.95,0.122,2.243733635040054,1.9173419242712182,1000 +LGBM,LGBM,experimental,False,5,0.9,0.889,2.0642395778601936,0.5210006870170777,1000 +LGBM,LGBM,experimental,False,5,0.95,0.951,2.459693167693339,0.5210006870170777,1000 +LGBM,LGBM,experimental,False,6,0.9,0.908,1.8086231900602612,0.4337431389507495,1000 +LGBM,LGBM,experimental,False,6,0.95,0.948,2.1551074551794365,0.4337431389507495,1000 LGBM,LGBM,experimental,True,1,0.9,0.049,2.159654648685151,2.17137681706751,1000 LGBM,LGBM,experimental,True,1,0.95,0.099,2.573387237083486,2.17137681706751,1000 LGBM,LGBM,experimental,True,2,0.9,0.373,2.129643042411216,1.319771507009933,1000 @@ -23,18 +23,18 @@ LGBM,LGBM,experimental,True,5,0.9,0.891,2.063666189492902,0.5200351889316859,100 LGBM,LGBM,experimental,True,5,0.95,0.947,2.459009933312703,0.5200351889316859,1000 LGBM,LGBM,experimental,True,6,0.9,0.897,1.8093537325759845,0.43669034939483387,1000 LGBM,LGBM,experimental,True,6,0.95,0.944,2.1559779502779253,0.43669034939483387,1000 -LGBM,LGBM,observational,False,1,0.9,0.893,12.590352220156928,3.3786016989727083,1000 -LGBM,LGBM,observational,False,1,0.95,0.953,15.002329994503222,3.3786016989727083,1000 -LGBM,LGBM,observational,False,2,0.9,0.914,14.716998683865025,3.6220054403232314,1000 -LGBM,LGBM,observational,False,2,0.95,0.966,17.536385553259827,3.6220054403232314,1000 -LGBM,LGBM,observational,False,3,0.9,0.933,14.387779381623973,3.413493039888865,1000 -LGBM,LGBM,observational,False,3,0.95,0.977,17.144096558765057,3.413493039888865,1000 -LGBM,LGBM,observational,False,4,0.9,0.842,18.12890407178146,5.76469995432725,1000 -LGBM,LGBM,observational,False,4,0.95,0.932,21.60192157993247,5.76469995432725,1000 -LGBM,LGBM,observational,False,5,0.9,0.917,7.704461439047936,1.901354597911667,1000 -LGBM,LGBM,observational,False,5,0.95,0.96,9.18043204172422,1.901354597911667,1000 -LGBM,LGBM,observational,False,6,0.9,0.922,7.569503728862976,1.7987540722258704,1000 -LGBM,LGBM,observational,False,6,0.95,0.972,9.019620011362129,1.7987540722258704,1000 +LGBM,LGBM,observational,False,1,0.9,0.893,12.590652453419517,3.3787304616783773,1000 +LGBM,LGBM,observational,False,1,0.95,0.953,15.002687744501154,3.3787304616783773,1000 +LGBM,LGBM,observational,False,2,0.9,0.914,14.716645515368727,3.622038823656133,1000 +LGBM,LGBM,observational,False,2,0.95,0.966,17.535964727040476,3.622038823656133,1000 +LGBM,LGBM,observational,False,3,0.9,0.933,14.387879061625718,3.413516510279929,1000 +LGBM,LGBM,observational,False,3,0.95,0.977,17.14421533481309,3.413516510279929,1000 +LGBM,LGBM,observational,False,4,0.9,0.843,18.129751335736472,5.765050835726839,1000 +LGBM,LGBM,observational,False,4,0.95,0.932,21.602931157204278,5.765050835726839,1000 +LGBM,LGBM,observational,False,5,0.9,0.917,7.704465948378402,1.901185439754437,1000 +LGBM,LGBM,observational,False,5,0.95,0.96,9.180437414922883,1.901185439754437,1000 +LGBM,LGBM,observational,False,6,0.9,0.922,7.569553123736534,1.7987428999886972,1000 +LGBM,LGBM,observational,False,6,0.95,0.971,9.019678868984235,1.7987428999886972,1000 LGBM,LGBM,observational,True,1,0.9,0.906,4.1677645580041025,1.0303464962408189,1000 LGBM,LGBM,observational,True,1,0.95,0.967,4.966197779476664,1.0303464962408189,1000 LGBM,LGBM,observational,True,2,0.9,0.917,5.020279353776863,1.2235227285733399,1000 diff --git a/results/did/did_pa_atte_coverage_metadata.csv b/results/did/did_pa_atte_coverage_metadata.csv index 65f17867..1e597647 100644 --- a/results/did/did_pa_atte_coverage_metadata.csv +++ b/results/did/did_pa_atte_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,did_pa_atte_coverage.py,2025-01-08 16:22:26,14811.1988697052,3.12.8 +0.10.dev0,did_pa_atte_coverage.py,2025-04-24 10:30:16,10597.874007225037,3.12.3 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml new file mode 100644 index 00000000..fa871580 --- /dev/null +++ b/results/did/did_pa_multi_config.yml @@ -0,0 +1,123 @@ +confidence_parameters: + level: + - 0.95 + - 0.9 +dgp_parameters: + DGP: + - 1 + - 4 + - 6 + n_obs: + - 2000 +dml_parameters: + in_sample_normalization: + - true + - false + learners: + - ml_g: !!python/tuple + - Linear + - !!python/object:sklearn.linear_model._base.LinearRegression + _sklearn_version: 1.5.2 + copy_X: true + fit_intercept: true + n_jobs: null + positive: false + ml_m: !!python/tuple + - Linear + - !!python/object:sklearn.linear_model._logistic.LogisticRegression + C: 1.0 + _sklearn_version: 1.5.2 + class_weight: null + dual: false + fit_intercept: true + intercept_scaling: 1 + l1_ratio: null + max_iter: 100 + multi_class: deprecated + n_jobs: null + penalty: l2 + random_state: null + solver: lbfgs + tol: 0.0001 + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.02 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMClassifier + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.02 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + score: + - observational + - experimental +simulation_parameters: + max_runtime: 19800 + n_jobs: -2 + random_seed: 42 + repetitions: 1000 diff --git a/results/did/did_pa_multi_coverage.csv b/results/did/did_pa_multi_coverage.csv new file mode 100644 index 00000000..8276aac2 --- /dev/null +++ b/results/did/did_pa_multi_coverage.csv @@ -0,0 +1,25 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +Linear,Linear,experimental,False,1,0.9,0.8875,0.589658704307476,0.14271881238392356,0.85,0.9184713776325004,20 +Linear,Linear,experimental,False,1,0.95,0.9458333333333334,0.7026216829731943,0.14271881238392356,0.9,1.0088572704968817,20 +Linear,Linear,experimental,False,4,0.9,0.7041666666666667,2.0297642964886093,0.9047675553035617,0.55,2.9260160123442596,20 +Linear,Linear,experimental,False,4,0.95,0.7708333333333333,2.418613336188561,0.9047675553035617,0.65,3.265541044699371,20 +Linear,Linear,experimental,False,6,0.9,0.9375,1.9858835644872976,0.4370880265956636,0.9,2.8747704680291024,20 +Linear,Linear,experimental,False,6,0.95,0.975,2.3663262190076697,0.4370880265956636,0.9,3.2067165503022985,20 +Linear,Linear,experimental,True,1,0.9,0.9041666666666666,0.5893929319394263,0.1419165948760371,0.9,0.9179189354368003,20 +Linear,Linear,experimental,True,1,0.95,0.9458333333333334,0.7023049956638021,0.1419165948760371,0.9,1.0086412447991253,20 +Linear,Linear,experimental,True,4,0.9,0.7041666666666667,2.031873164323966,0.9059623323417508,0.6,2.943810800692373,20 +Linear,Linear,experimental,True,4,0.95,0.7833333333333333,2.4211262072050013,0.9059623323417508,0.6,3.2739360531515684,20 +Linear,Linear,experimental,True,6,0.9,0.9458333333333334,1.9877755956053036,0.4386853538456557,0.9,2.8801526124840118,20 +Linear,Linear,experimental,True,6,0.95,0.975,2.3685807131390373,0.4386853538456557,0.9,3.2111476829248415,20 +Linear,Linear,observational,False,1,0.9,0.9125,0.6827078489949769,0.15467502808332462,0.9,1.0590069349882765,20 +Linear,Linear,observational,False,1,0.95,0.9583333333333334,0.8134965774875249,0.15467502808332462,1.0,1.1738447754301748,20 +Linear,Linear,observational,False,4,0.9,0.8,2.7854153587870214,0.8355183226583197,0.7,4.0015833335633415,20 +Linear,Linear,observational,False,4,0.95,0.8416666666666666,3.3190271132668636,0.8355183226583197,0.8,4.483472762454467,20 +Linear,Linear,observational,False,6,0.9,0.9333333333333333,2.5337718344427866,0.5967437923241619,0.9,3.6412755250672886,20 +Linear,Linear,observational,False,6,0.95,0.9708333333333334,3.0191753595448407,0.5967437923241619,0.95,4.081839476947988,20 +Linear,Linear,observational,True,1,0.9,0.9041666666666666,0.6620805479575324,0.15571526121686724,0.85,1.0317138682400495,20 +Linear,Linear,observational,True,1,0.95,0.9541666666666666,0.7889176323040639,0.15571526121686724,0.95,1.1316182486711308,20 +Linear,Linear,observational,True,4,0.9,0.7916666666666667,2.631108576842307,0.8079463860509168,0.7,3.77565721661986,20 +Linear,Linear,observational,True,4,0.95,0.8416666666666666,3.1351592418487586,0.8079463860509168,0.75,4.24016752287414,20 +Linear,Linear,observational,True,6,0.9,0.9333333333333333,2.3368968698600474,0.5421819294976428,0.9,3.361076606239287,20 +Linear,Linear,observational,True,6,0.95,0.9791666666666666,2.784584369977626,0.5421819294976428,0.95,3.7810902213750666,20 diff --git a/results/did/did_pa_multi_coverage_metadata.csv b/results/did/did_pa_multi_coverage_metadata.csv new file mode 100644 index 00000000..0cb88dc6 --- /dev/null +++ b/results/did/did_pa_multi_coverage_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (seconds),Python Version +0.10.dev0,did_pa_multi_coverage.py,2025-03-18 07:37:01,120.99546647071838,3.11.9 diff --git a/results/plm/plr_ate_config.yml b/results/plm/plr_ate_config.yml new file mode 100644 index 00000000..af73b185 --- /dev/null +++ b/results/plm/plr_ate_config.yml @@ -0,0 +1,386 @@ +confidence_parameters: + level: + - 0.95 + - 0.9 +dgp_parameters: + dim_x: + - 20 + n_obs: + - 500 + theta: + - 0.5 +dml_parameters: + learners: + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: &id001 !!python/tuple + - criterion + - max_depth + - min_samples_split + - min_samples_leaf + - min_weight_fraction_leaf + - max_features + - max_leaf_nodes + - min_impurity_decrease + - random_state + - ccp_alpha + - monotonic_cst + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 20 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 20 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 20 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 20 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + score: + - partialling out + - IV-type +simulation_parameters: + max_runtime: 19800 + n_jobs: -2 + random_seed: 42 + repetitions: 1000 diff --git a/results/plm/plr_ate_coverage.csv b/results/plm/plr_ate_coverage.csv index e1067cc0..87a505d6 100644 --- a/results/plm/plr_ate_coverage.csv +++ b/results/plm/plr_ate_coverage.csv @@ -1,17 +1,25 @@ -Learner g,Learner m,score,level,Coverage,CI Length,Bias,repetition -Lasso,Lasso,IV-type,0.9,0.881,0.1393979255576113,0.0352891099128789,1000 -Lasso,Lasso,IV-type,0.95,0.945,0.16610287331091153,0.0352891099128789,1000 -Lasso,Lasso,partialling out,0.9,0.908,0.14646362984437974,0.034686755904342816,1000 -Lasso,Lasso,partialling out,0.95,0.956,0.17452217926042807,0.034686755904342816,1000 -Lasso,Random Forest,IV-type,0.9,0.895,0.14672332096879584,0.03621404411832195,1000 -Lasso,Random Forest,IV-type,0.95,0.953,0.17483162032109167,0.03621404411832195,1000 -Lasso,Random Forest,partialling out,0.9,0.816,0.14332193251141256,0.04209132271298422,1000 -Lasso,Random Forest,partialling out,0.95,0.888,0.17077861599008798,0.04209132271298422,1000 -Random Forest,Lasso,IV-type,0.9,0.883,0.14193144590758777,0.03591650651278451,1000 -Random Forest,Lasso,IV-type,0.95,0.951,0.16912174900823193,0.03591650651278451,1000 -Random Forest,Lasso,partialling out,0.9,0.901,0.1519648979095884,0.03615745065828101,1000 -Random Forest,Lasso,partialling out,0.95,0.952,0.181077344474182,0.03615745065828101,1000 -Random Forest,Random Forest,IV-type,0.9,0.893,0.14942288181113228,0.03672076481604481,1000 -Random Forest,Random Forest,IV-type,0.95,0.948,0.17804834546815554,0.03672076481604481,1000 -Random Forest,Random Forest,partialling out,0.9,0.878,0.14635785065361873,0.037417599679567926,1000 -Random Forest,Random Forest,partialling out,0.95,0.946,0.17439613558042621,0.037417599679567926,1000 +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,repetition +LGBM,LGBM,IV-type,0.9,0.873,0.1600979705787658,0.041736453670531866,1000 +LGBM,LGBM,IV-type,0.95,0.937,0.19076849829726017,0.041736453670531866,1000 +LGBM,LGBM,partialling out,0.9,0.807,0.14701046434404016,0.043407336971130486,1000 +LGBM,LGBM,partialling out,0.95,0.887,0.17517377275621215,0.043407336971130486,1000 +LGBM,Lasso,IV-type,0.9,0.878,0.14908437061246727,0.03862236976140604,1000 +LGBM,Lasso,IV-type,0.95,0.926,0.17764498449616647,0.03862236976140604,1000 +LGBM,Lasso,partialling out,0.9,0.892,0.15981114790450912,0.039529461666836616,1000 +LGBM,Lasso,partialling out,0.95,0.945,0.19042672800093632,0.039529461666836616,1000 +Lasso,Lasso,IV-type,0.9,0.877,0.1404646476549414,0.03601132554422347,1000 +Lasso,Lasso,IV-type,0.95,0.928,0.16737395108830316,0.03601132554422347,1000 +Lasso,Lasso,partialling out,0.9,0.9,0.14736731076791165,0.03607425067346851,1000 +Lasso,Lasso,partialling out,0.95,0.938,0.17559898149657663,0.03607425067346851,1000 +Lasso,Random Forest,IV-type,0.9,0.839,0.13067912086907693,0.03663040619086667,1000 +Lasso,Random Forest,IV-type,0.95,0.901,0.1557137767385692,0.03663040619086667,1000 +Lasso,Random Forest,partialling out,0.9,0.753,0.14303542962976423,0.04845002977336067,1000 +Lasso,Random Forest,partialling out,0.95,0.854,0.17043722675016001,0.04845002977336067,1000 +Random Forest,Lasso,IV-type,0.9,0.883,0.14162830043619654,0.03632778967870182,1000 +Random Forest,Lasso,IV-type,0.95,0.933,0.16876052889948315,0.03632778967870182,1000 +Random Forest,Lasso,partialling out,0.9,0.888,0.1512642580778129,0.037711493804103186,1000 +Random Forest,Lasso,partialling out,0.95,0.948,0.18024248062130577,0.037711493804103186,1000 +Random Forest,Random Forest,IV-type,0.9,0.852,0.13195953745670919,0.036614704598155204,1000 +Random Forest,Random Forest,IV-type,0.95,0.911,0.15723948720656877,0.036614704598155204,1000 +Random Forest,Random Forest,partialling out,0.9,0.896,0.14282075762578683,0.03605962387417277,1000 +Random Forest,Random Forest,partialling out,0.95,0.94,0.17018142928016597,0.03605962387417277,1000 diff --git a/results/plm/plr_ate_coverage_metadata.csv b/results/plm/plr_ate_coverage_metadata.csv index 8d5c7fd5..5d2418e3 100644 --- a/results/plm/plr_ate_coverage_metadata.csv +++ b/results/plm/plr_ate_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_ate_coverage.py,2025-01-08 14:10:27,6916.502653360367,3.12.8 +0.10.dev0,plr_ate_coverage.py,2025-04-24 09:36:42,6508.21887755394,3.12.3 diff --git a/results/plm/plr_ate_metadata.csv b/results/plm/plr_ate_metadata.csv new file mode 100644 index 00000000..16eb5fba --- /dev/null +++ b/results/plm/plr_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.dev0,PLRATECoverageSimulation,2025-04-28 10:01,17.98821387688319,3.12.9,scripts/plm/plr_ate_config.yml diff --git a/results/plm/plr_ate_sensitivity.csv b/results/plm/plr_ate_sensitivity.csv index 00934b4f..7981ab2d 100644 --- a/results/plm/plr_ate_sensitivity.csv +++ b/results/plm/plr_ate_sensitivity.csv @@ -1,17 +1,17 @@ Learner g,Learner m,score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition LGBM,LGBM,IV-type,0.9,0.49,1.2836841849471865,0.642852034975727,1.0,0.998,0.0883267598773138,0.025200860015212666,1.3451446703513257,0.27137365708627864,500 -LGBM,LGBM,IV-type,0.95,0.65,1.529604050351386,0.642852034975727,1.0,1.0,0.0883267598773138,0.013790413915027113,1.3451446703513257,0.27137365708627864,500 +LGBM,LGBM,IV-type,0.95,0.65,1.529604050351386,0.642852034975727,1.0,1.0,0.0883267598773138,0.013790413915027114,1.3451446703513257,0.27137365708627864,500 LGBM,LGBM,partialling out,0.9,0.052,1.0555526522517718,0.9216896766797483,1.0,0.878,0.12290629723561408,0.0667859903596657,1.6463724503661545,0.2830593598175856,500 LGBM,LGBM,partialling out,0.95,0.114,1.2577685626857555,0.9216896766797483,1.0,0.962,0.12290629723561408,0.05210975377693211,1.6463724503661545,0.2830593598175856,500 -LGBM,Random Forest,IV-type,0.9,0.072,1.1846157067784349,0.9322070273917288,1.0,0.934,0.11754241223304673,0.058515658188839345,1.6980814469560257,0.26726499739118403,500 -LGBM,Random Forest,IV-type,0.95,0.16,1.4115566776050241,0.9322070273917288,1.0,0.994,0.11754241223304673,0.04334326180178758,1.6980814469560257,0.26726499739118403,500 -LGBM,Random Forest,partialling out,0.9,0.078,1.2415314353647366,0.9950962660593035,1.0,0.918,0.11842149116467734,0.06021024644530299,1.8099982510012884,0.29229694861359934,500 -LGBM,Random Forest,partialling out,0.95,0.15,1.479375951220122,0.9950962660593035,1.0,0.98,0.11842149116467734,0.04525082945770369,1.8099982510012884,0.29229694861359934,500 -Random Forest,LGBM,IV-type,0.9,0.554,1.900486623597139,0.8881666888956794,1.0,1.0,0.07201385567825232,0.01814220891090863,2.11967639571274,0.46266796209857214,500 -Random Forest,LGBM,IV-type,0.95,0.746,2.2645694877143114,0.8881666888956794,1.0,1.0,0.07201385567825232,0.008578785415219068,2.11967639571274,0.46266796209857214,500 -Random Forest,LGBM,partialling out,0.9,0.002,1.5126486531347854,1.573242725840773,1.0,0.818,0.12824967172299567,0.08055028818351519,2.774465314925881,0.4031005519125824,500 -Random Forest,LGBM,partialling out,0.95,0.008,1.8024320418722997,1.573242725840773,1.0,0.948,0.12824967172299567,0.06705003584560411,2.774465314925881,0.4031005519125824,500 -Random Forest,Random Forest,IV-type,0.9,0.012,1.7129890288584426,1.6194855098925158,1.0,0.892,0.11959162432568951,0.07060214596391444,2.948463222220921,0.39969580126755805,500 -Random Forest,Random Forest,IV-type,0.95,0.038,2.041152323503278,1.6194855098925158,1.0,0.972,0.11959162432568951,0.05677408319758889,2.948463222220921,0.39969580126755805,500 -Random Forest,Random Forest,partialling out,0.9,0.0,1.7381117353695532,1.7366675645551972,1.0,0.824,0.1281371703134689,0.07833372270549209,3.0610973455175285,0.4635968018257515,500 -Random Forest,Random Forest,partialling out,0.95,0.018,2.0710878746970973,1.7366675645551972,1.0,0.946,0.1281371703134689,0.0642547167440049,3.0610973455175285,0.4635968018257515,500 +LGBM,Random Forest,IV-type,0.9,0.076,1.1831625247072215,0.9308062239804228,1.0,0.946,0.11734274159129685,0.05847446162225632,1.6971412413918896,0.26673626718612453,500 +LGBM,Random Forest,IV-type,0.95,0.15,1.40982510436599,0.9308062239804228,1.0,0.99,0.11734274159129685,0.04330052167462019,1.6971412413918896,0.26673626718612453,500 +LGBM,Random Forest,partialling out,0.9,0.074,1.2408824102177636,0.9969465002467008,1.0,0.93,0.11861197624692194,0.06042868914339051,1.8119621159758381,0.29323133175754634,500 +LGBM,Random Forest,partialling out,0.95,0.148,1.4786025900575936,0.9969465002467008,1.0,0.978,0.11861197624692194,0.04546020549453332,1.8119621159758381,0.29323133175754634,500 +Random Forest,LGBM,IV-type,0.9,0.556,1.9014670092481476,0.8897746033367344,1.0,1.0,0.07211930902619489,0.018402978138876647,2.1220916883044794,0.46567125428407596,500 +Random Forest,LGBM,IV-type,0.95,0.754,2.26573768927064,0.8897746033367344,1.0,1.0,0.07211930902619489,0.008809037433830246,2.1220916883044794,0.46567125428407596,500 +Random Forest,LGBM,partialling out,0.9,0.002,1.5148779135183594,1.5704287430339756,1.0,0.828,0.12800123432195906,0.0802383681199541,2.771929499160999,0.4014709332877519,500 +Random Forest,LGBM,partialling out,0.95,0.01,1.805088369458156,1.5704287430339756,1.0,0.942,0.12800123432195906,0.06673188982925375,2.771929499160999,0.4014709332877519,500 +Random Forest,Random Forest,IV-type,0.9,0.008,1.712740468910975,1.6062309195696611,1.0,0.896,0.11862651936611456,0.06965279743071341,2.9355183176965993,0.3908974740734249,500 +Random Forest,Random Forest,IV-type,0.95,0.042,2.040856146058031,1.6062309195696611,1.0,0.972,0.11862651936611456,0.05582930384773342,2.9355183176965993,0.3908974740734249,500 +Random Forest,Random Forest,partialling out,0.9,0.002,1.7398328179227547,1.738765052841725,1.0,0.826,0.12823635224819166,0.07839810366339917,3.0635620106955765,0.4647217397313531,500 +Random Forest,Random Forest,partialling out,0.95,0.016,2.0731386710496866,1.738765052841725,1.0,0.942,0.12823635224819166,0.06431405001184519,3.0635620106955765,0.4647217397313531,500 diff --git a/results/plm/plr_ate_sensitivity_metadata.csv b/results/plm/plr_ate_sensitivity_metadata.csv index f0d1e744..18d033f5 100644 --- a/results/plm/plr_ate_sensitivity_metadata.csv +++ b/results/plm/plr_ate_sensitivity_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_ate_sensitivity.py,2025-01-08 16:36:12,15659.224347829819,3.12.8 +0.10.dev0,plr_ate_sensitivity.py,2025-04-24 10:27:15,9539.846628665924,3.12.3 diff --git a/results/plm/plr_cate_coverage_metadata.csv b/results/plm/plr_cate_coverage_metadata.csv index 59b490d4..9e81be87 100644 --- a/results/plm/plr_cate_coverage_metadata.csv +++ b/results/plm/plr_cate_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_cate_coverage.py,2025-01-08 14:25:31,7808.868787527084,3.12.8 +0.10.dev0,plr_cate_coverage.py,2025-04-24 08:56:30,4092.604692697525,3.12.3 diff --git a/results/plm/plr_gate_coverage_metadata.csv b/results/plm/plr_gate_coverage_metadata.csv index febe93f4..980af1a1 100644 --- a/results/plm/plr_gate_coverage_metadata.csv +++ b/results/plm/plr_gate_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_gate_coverage.py,2025-01-08 13:02:47,2835.5379569530487,3.12.8 +0.10.dev0,plr_gate_coverage.py,2025-04-24 08:14:37,1583.488787651062,3.12.3 diff --git a/scripts/did/did_cs_atte_coverage.py b/scripts/did/did_cs_atte_coverage.py index 3886ea8e..9be682bc 100644 --- a/scripts/did/did_cs_atte_coverage.py +++ b/scripts/did/did_cs_atte_coverage.py @@ -7,7 +7,7 @@ from lightgbm import LGBMRegressor, LGBMClassifier import doubleml as dml -from doubleml.datasets import make_did_SZ2020 +from doubleml.did.datasets import make_did_SZ2020 # Number of repetitions n_rep = 1000 diff --git a/scripts/did/did_pa_atte_coverage.py b/scripts/did/did_pa_atte_coverage.py index 5184860d..144597a1 100644 --- a/scripts/did/did_pa_atte_coverage.py +++ b/scripts/did/did_pa_atte_coverage.py @@ -7,7 +7,7 @@ from lightgbm import LGBMRegressor, LGBMClassifier import doubleml as dml -from doubleml.datasets import make_did_SZ2020 +from doubleml.did.datasets import make_did_SZ2020 # Number of repetitions n_rep = 1000 diff --git a/scripts/did/did_pa_multi.py b/scripts/did/did_pa_multi.py new file mode 100644 index 00000000..f06a03e4 --- /dev/null +++ b/scripts/did/did_pa_multi.py @@ -0,0 +1,14 @@ + +from montecover.did import DIDMultiCoverageSimulation + +# Create and run simulation with config file +sim = DIDMultiCoverageSimulation( + config_file="scripts/did/did_pa_multi_config.yml", + log_level="DEBUG", + log_file="logs/did/did_pa_multi_sim.log" +) +sim.run_simulation() +sim.save_results(output_path="results/did/", file_prefix="did_multi") + +# Save config file for reproducibility +sim.save_config("results/did/did_pa_multi_config.yml") diff --git a/scripts/did/did_pa_multi_config.yml b/scripts/did/did_pa_multi_config.yml new file mode 100644 index 00000000..67eead13 --- /dev/null +++ b/scripts/did/did_pa_multi_config.yml @@ -0,0 +1,28 @@ +# Simulation parameters for DID Multi Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + DGP: [1, 4, 6] # Different DGP specifications + n_obs: [2000] # Sample size for each simulation (has to be a list) + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: ["Linear"] + ml_m: ["Linear"] + - ml_g: ["LGBM"] + ml_m: ["LGBM"] + + score: + - observational # Standard DML score + - experimental # Experimental score (no propensity estimation) + + in_sample_normalization: [true, false] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/plm/plr_ate.py b/scripts/plm/plr_ate.py new file mode 100644 index 00000000..09e25312 --- /dev/null +++ b/scripts/plm/plr_ate.py @@ -0,0 +1,14 @@ + +from montecover.plm import PLRATECoverageSimulation + +# Create and run simulation with config file +sim = PLRATECoverageSimulation( + config_file="scripts/plm/plr_ate_config.yml", + log_level="INFO", + log_file="logs/plm/plr_ate_sim.log" +) +sim.run_simulation() +sim.save_results(output_path="results/plm/", file_prefix="plr_ate") + +# Save config file for reproducibility +sim.save_config("results/plm/plr_ate_config.yml") diff --git a/scripts/plm/plr_ate_config.yml b/scripts/plm/plr_ate_config.yml new file mode 100644 index 00000000..e2067bc1 --- /dev/null +++ b/scripts/plm/plr_ate_config.yml @@ -0,0 +1,33 @@ +# Simulation parameters for PLR ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: ["Lasso"] + ml_m: ["Lasso"] + - ml_g: ["Random Forest"] + ml_m: ["Random Forest"] + - ml_g: ["Lasso"] + ml_m: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Lasso"] + - ml_g: ["LGBM"] + ml_m: ["LGBM"] + - ml_g: ["LGBM"] + ml_m: ["Lasso"] + + score: ["partialling out", "IV-type"] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels \ No newline at end of file