diff --git a/models/propermab_linear/README.md b/models/propermab_linear/README.md new file mode 100644 index 0000000..3724d53 --- /dev/null +++ b/models/propermab_linear/README.md @@ -0,0 +1,126 @@ +# PROPERMAB Linear Baseline + +Ridge regression model trained on PROPERMAB features. + +## Description + +This baseline uses 5 PROPERMAB descriptors to predict antibody developability properties: +- **hyd_patch_area_cdr**: Hydrophobic surface patches +- **pos_patch_area**: Positively charged surface patches +- **dipole_moment**: Dipole moment of Fv domain +- **aromatic_asa**: Total solvent accessible surface area +- **exposed_net_charge**: Total charge of CDR atoms that are solvent-exposed + +A Ridge regression model is trained separately for each biophysical property using 5-fold cross-validation. + +## Requirements + +- Pre-computed PROPERMAB training and test features in `feature_store_top5.csv` + +## Installation + +```bash +# From this directory +pixi install +``` + +## Usage + +### CLI Interface + +The baseline implements a standardized CLI interface with only required arguments. PROPERMAB features are loaded from the csv file `feature_store_top5.csv`. + +#### Train Models + +```bash +# From the baseline directory +pixi run python -m tap_linear train \ + --data \ + --run-dir \ + [--seed 42] + +# Example +pixi run python -m tap_linear train \ + --data ../../data/GDPa1_v1.2_20250814.csv \ + --run-dir ./outputs/run_001 +``` + +This will: +1. Load training data from `--data` +2. Load PROPERMAB features automatically from csv file +3. Train Ridge models for each property using 5-fold cross-validation +4. Save trained models to `run-dir/models.pkl` +5. Save cross-validation predictions to `run-dir/cv_predictions.csv` + +#### Generate Predictions + +```bash +# From the baseline directory +pixi run python -m tap_linear predict \ + --data \ + --run-dir \ + --out-dir + +# Example: CV predictions +pixi run python -m tap_linear predict \ + --data ../../data/GDPa1_v1.2_20250814.csv \ + --run-dir ./outputs/run_001 \ + --out-dir ../../predictions/cv_run_001 + +# Example: Heldout predictions +pixi run python -m tap_linear predict \ + --data ../../data/heldout-set-sequences.csv \ + --run-dir ./outputs/run_001 \ + --out-dir ../../predictions/heldout_run_001 +``` + +Behavior: +- PROPERMAB features are loaded automatically from csv file +- For **training data** (with fold column): Uses CV predictions from training +- For **heldout data**: Uses final models trained on all data +- Writes predictions to `out-dir/predictions.csv` + +### Development + +```bash +# Run tests (requires dev environment) +pixi run -e dev test + +# Lint code (requires dev environment) +pixi run -e dev lint +``` + +## Implementation + +This baseline implements the `BaseModel` interface from `abdev_core`: + +```python +from abdev_core import BaseModel, load_features + +class TapLinearModel(BaseModel): + def train(self, df: pd.DataFrame, run_dir: Path, *, seed: int) -> None: + # Load features from centralized store + tap_features = load_features("TAP", dataset="GDPa1") + # Train models and generate CV predictions + ... + + def predict(self, df: pd.DataFrame, run_dir: Path, out_dir: Path) -> None: + # Load features from centralized store + tap_features = load_features("TAP", dataset="heldout_test") + # Generate predictions from trained models + ... +``` + +Features are managed centrally by `abdev_core` - models simply import what they need. See the [abdev_core documentation](../../libs/abdev_core/README.md) for details. + +## Output + +Predictions are written to `/predictions.csv` with columns: +- `antibody_name` +- `vh_protein_sequence`, `vl_protein_sequence` +- Predicted values for: `HIC`, `Tm2`, `Titer`, `PR_CHO`, `AC-SINS_pH7.4` + +## Reference + +PROPERMAB features from: Li B, et al. (2025). "PROPERMAB: an integrative framework for in silico prediction of antibody developability using machine learning +" mAbs. diff --git a/models/propermab_linear/pixi.lock b/models/propermab_linear/pixi.lock new file mode 100644 index 0000000..87f1367 --- /dev/null +++ b/models/propermab_linear/pixi.lock @@ -0,0 +1,1899 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-ha97dd6f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.3-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hfe2f287_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.2-py311hc3e1efb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.2-py311h1e13796_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ + osx-64: + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-37_he492b99_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-37_h9b27e0a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.4-h3d58e20_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h306097a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-h336fb69_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-37_h859234e_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_h6006d49_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.3-h472b3d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.3-py311hf157cb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.4-h230baf5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.3.3-py311hca9a5ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h3999593_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.7.2-py311had5a2ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.16.2-py311h32c7e5c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-37_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-37_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.4-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-37_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.3-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.3-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.4-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.14-hec0b533_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.2-py311h0f965f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.16.2-py311h2734c94_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ + dev: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-ha97dd6f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.3-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hfe2f287_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.1-ha3a3aed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.2-py311hc3e1efb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.2-py311h1e13796_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ + osx-64: + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-37_he492b99_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-37_h9b27e0a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.4-h3d58e20_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h306097a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-h336fb69_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-37_h859234e_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_h6006d49_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.3-h472b3d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.3-py311hf157cb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.4-h230baf5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.3.3-py311hca9a5ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h3999593_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.14.1-hba89d1c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.7.2-py311had5a2ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.16.2-py311h32c7e5c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-37_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-37_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.4-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-37_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.3-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.3-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.4-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.14-hec0b533_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.14.1-h492a034_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.2-py311h0f965f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.16.2-py311h2734c94_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ../../libs/abdev_core + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- pypi: ../../libs/abdev_core + name: abdev-core + version: 0.1.0 + sha256: 8c04f27615119f3279aa64da48b93f88e087317fb83ab8b9f59dfd5b874ff070 + requires_dist: + - pandas>=2.0 + - typer>=0.9.0 + - scikit-learn>=1.3.0 + requires_python: '>=3.11' + editable: true +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 + md5: 51a19bba1b8ebfb60df25cde030b7ebc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260341 + timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda + sha256: 8f50b58efb29c710f3cecf2027a8d7325ba769ab10c746eff75cea3ac050b10c + md5: 97c4b3bd8a90722104798175a1bdddbf + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 132607 + timestamp: 1757437730085 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 + md5: 58fd217444c2a5701a44244faf518206 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 125061 + timestamp: 1757437486465 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + sha256: 3b5ad78b8bb61b6cdc0978a6a99f8dfb2cc789a451378d054698441005ecbdb6 + md5: f9e5fbc24009179e8b0409624691758a + depends: + - __unix + license: ISC + purls: [] + size: 155907 + timestamp: 1759649036195 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + sha256: c6567ebc27c4c071a353acaf93eb82bb6d9a6961e40692a359045a89a61d02c0 + md5: e76c4ba9e1837847679421b8d549b784 + depends: + - __unix + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=compressed-mapping + size: 91622 + timestamp: 1758270534287 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca + md5: 72e42d28960d875c7654614f8b50939a + depends: + - python >=3.9 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21284 + timestamp: 1746947398083 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 + md5: 9614359868482abba1bd15ce465e3c42 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=compressed-mapping + size: 13387 + timestamp: 1760831448842 +- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda + sha256: 6fc414c5ae7289739c2ba75ff569b79f72e38991d61eb67426a8a4b92f90462c + md5: 4e717929cfa0d49cef92d911e31d0e90 + depends: + - python >=3.10 + - setuptools + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/joblib?source=hash-mapping + size: 224671 + timestamp: 1756321850584 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-ha97dd6f_2.conda + sha256: 707dfb8d55d7a5c6f95c772d778ef07a7ca85417d9971796f7d3daad0b615de8 + md5: 14bae321b8127b63cba276bd53fac237 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.44 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 747158 + timestamp: 1758810907507 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h4a7cf45_openblas.conda + build_number: 37 + sha256: b8872684dc3a68273de2afda2a4a1c79ffa3aab45fcfc4f9b3621bd1cc1adbcc + md5: 8bc098f29d8a7e3517bac5b25aab39b1 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - blas 2.137 openblas + - liblapacke 3.9.0 37*_openblas + - liblapack 3.9.0 37*_openblas + - mkl <2025 + - libcblas 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17477 + timestamp: 1760212730445 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-37_he492b99_openblas.conda + build_number: 37 + sha256: acb6e26ccd1b0ab365b4675f31a689523d217443bf3af64c4a48578ba01298c5 + md5: bcc2cce1ec0cad310fdffb0d99c94466 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - liblapack 3.9.0 37*_openblas + - mkl <2025 + - blas 2.137 openblas + - liblapacke 3.9.0 37*_openblas + - libcblas 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17706 + timestamp: 1760213529088 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-37_h51639a9_openblas.conda + build_number: 37 + sha256: 544f935351201a4bea7e1dae0b240ce619febf56655724c64481ec694293bc64 + md5: 675aec03581d97a77f7bb47e99fed4b4 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - liblapacke 3.9.0 37*_openblas + - blas 2.137 openblas + - mkl <2025 + - liblapack 3.9.0 37*_openblas + - libcblas 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17647 + timestamp: 1760213578751 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_h0358290_openblas.conda + build_number: 37 + sha256: 8e5a6014424cc11389ebf3febedad937aa4a00e48464831ae4dec69f3c46c4ab + md5: 3794858d4d6910a7fc3c181519e0b77a + depends: + - libblas 3.9.0 37_h4a7cf45_openblas + constrains: + - blas 2.137 openblas + - liblapacke 3.9.0 37*_openblas + - liblapack 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17474 + timestamp: 1760212737633 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-37_h9b27e0a_openblas.conda + build_number: 37 + sha256: 750d1d6335158c1ac0141330145ddde42828c90dea1c7881730c56dfea424358 + md5: 8051e584c52b31e246ecc8cd927a6e31 + depends: + - libblas 3.9.0 37_he492b99_openblas + constrains: + - liblapacke 3.9.0 37*_openblas + - liblapack 3.9.0 37*_openblas + - blas 2.137 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17674 + timestamp: 1760213551530 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-37_hb0561ab_openblas.conda + build_number: 37 + sha256: 911a01cac0c76d52628fdfe2aecfa010b4145af630ec23fe3fefa7a4c8050a57 + md5: 33ab91e02a34879065d03bb010eb6bf1 + depends: + - libblas 3.9.0 37_h51639a9_openblas + constrains: + - liblapacke 3.9.0 37*_openblas + - blas 2.137 openblas + - liblapack 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17639 + timestamp: 1760213591611 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.4-h3d58e20_0.conda + sha256: 64f58f7ad9076598ae4a19f383f6734116d96897032c77de599660233f2924f9 + md5: 17c4292004054f6783b16b55b499f086 + depends: + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 571252 + timestamp: 1761043932993 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.4-hf598326_0.conda + sha256: df55e80dda21f2581366f66cf18a6c11315d611f6fb01e56011c5199f983c0d9 + md5: 6002a2ba796f1387b6a5c6d77051d1db + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 567892 + timestamp: 1761043967532 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 + md5: 4211416ecba1866fab0c6470986c22d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 74811 + timestamp: 1752719572741 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + sha256: 689862313571b62ee77ee01729dc093f2bf25a2f99415fcfe51d3a6cd31cce7b + md5: 9fdeae0b7edda62e989557d645769515 + depends: + - __osx >=10.13 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 72450 + timestamp: 1752719744781 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + sha256: 8fbb17a56f51e7113ed511c5787e0dec0d4b10ef9df921c4fd1cccca0458f648 + md5: b1ca5f21335782f71a8bd69bdc093f67 + depends: + - __osx >=11.0 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 65971 + timestamp: 1752719657566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab + md5: ede4673863426c0883c0063d853bbd85 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 57433 + timestamp: 1743434498161 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + sha256: 6394b1bc67c64a21a5cc73d1736d1d4193a64515152e861785c44d2cfc49edf3 + md5: 4ca9ea59839a9ca8df84170fab4ceb41 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 51216 + timestamp: 1743434595269 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60 + md5: c215a60c2935b517dcda8cad4705734d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 39839 + timestamp: 1743434670405 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + sha256: 08f9b87578ab981c7713e4e6a7d935e40766e10691732bba376d4964562bcb45 + md5: c0374badb3a5d4b1372db28d19462c53 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 h767d61c_7 + - libgcc-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 822552 + timestamp: 1759968052178 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + sha256: 2045066dd8e6e58aaf5ae2b722fb6dfdbb57c862b5f34ac7bfb58c40ef39b6ad + md5: 280ea6eee9e2ddefde25ff799c4f0363 + depends: + - libgcc 15.2.0 h767d61c_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29313 + timestamp: 1759968065504 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda + sha256: 9ca24328e31c8ef44a77f53104773b9fe50ea8533f4c74baa8489a12de916f02 + md5: 8621a450add4e231f676646880703f49 + depends: + - libgfortran5 15.2.0 hcd61629_7 + constrains: + - libgfortran-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29275 + timestamp: 1759968110483 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h306097a_1.conda + sha256: 97551952312cf4954a7ad6ba3fd63c739eac65774fe96ddd121c67b5196a8689 + md5: cd5393330bff47a00d37a117c65b65d0 + depends: + - libgfortran5 15.2.0 h336fb69_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 134506 + timestamp: 1759710031253 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + sha256: e9a5d1208b9dc0b576b35a484d527d9b746c4e65620e0d77c44636033b2245f0 + md5: f699348e3f4f924728e33551b1920f79 + depends: + - libgfortran5 15.2.0 h742603c_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 134016 + timestamp: 1759712902814 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + sha256: e93ceda56498d98c9f94fedec3e2d00f717cbedfc97c49be0e5a5828802f2d34 + md5: f116940d825ffc9104400f0d7f1a4551 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1572758 + timestamp: 1759968082504 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-h336fb69_1.conda + sha256: 1d53bad8634127b3c51281ce6ad3fbf00f7371824187490a36e5182df83d6f37 + md5: b6331e2dcc025fc79cd578f4c181d6f2 + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1236316 + timestamp: 1759709318982 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + sha256: 18808697013a625ca876eeee3d86ee5b656f17c391eca4a4bc70867717cc5246 + md5: afccf412b03ce2f309f875ff88419173 + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 764028 + timestamp: 1759712189275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + sha256: e9fb1c258c8e66ee278397b5822692527c5f5786d372fe7a869b900853f3f5ca + md5: f7b4d76975aac7e5d9e6ad13845f92fe + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 447919 + timestamp: 1759967942498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h47877c9_openblas.conda + build_number: 37 + sha256: e37125ad315464a927578bf6ba3455a30a7f319d5e60e54ccc860ddd218d516d + md5: 8305e6a5ed432ad3e5a609e8024dbc17 + depends: + - libblas 3.9.0 37_h4a7cf45_openblas + constrains: + - blas 2.137 openblas + - liblapacke 3.9.0 37*_openblas + - libcblas 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17470 + timestamp: 1760212744703 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-37_h859234e_openblas.conda + build_number: 37 + sha256: 80de4cf2bd27475ec36e5dc15fb408343bcf4833b6e4c74a1d48d87a56118fbc + md5: abf96060ac52487961009e1fafec3e96 + depends: + - libblas 3.9.0 37_he492b99_openblas + constrains: + - libcblas 3.9.0 37*_openblas + - liblapacke 3.9.0 37*_openblas + - blas 2.137 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17704 + timestamp: 1760213576216 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-37_hd9741b5_openblas.conda + build_number: 37 + sha256: 61a3f8928431f74c359669ea68b5abedbbd46efb06f15de1e5c7e5d40f545263 + md5: 53335fc42466f597d0bc6d66a9ed4468 + depends: + - libblas 3.9.0 37_h51639a9_openblas + constrains: + - liblapacke 3.9.0 37*_openblas + - blas 2.137 openblas + - libcblas 3.9.0 37*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17633 + timestamp: 1760213604248 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 112894 + timestamp: 1749230047870 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + sha256: 7e22fd1bdb8bf4c2be93de2d4e718db5c548aa082af47a7430eb23192de6bb36 + md5: 8468beea04b9065b9807fc8b9cdc5894 + depends: + - __osx >=10.13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 104826 + timestamp: 1749230155443 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285 + md5: d6df911d4564d77c4374b02552cb17d1 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 92286 + timestamp: 1749230283517 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + sha256: 1b51d1f96e751dc945cc06f79caa91833b0c3326efe24e9b506bd64ef49fc9b0 + md5: dfc5aae7b043d9f56ba99514d5e60625 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5938936 + timestamp: 1755474342204 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_h6006d49_2.conda + sha256: 49b2938be415a210e2a3ca56666be81eae6533dc3692674ee549836aa124a285 + md5: 9b66105b30ae81dbdd37111e9a5784f1 + depends: + - __osx >=10.13 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6267056 + timestamp: 1760596221719 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_2.conda + sha256: ddd201896c3f2d9d1911e8fb1aa34bf876795376f0fa5779c79b8998692f6800 + md5: e9f522513b5bbc6381f124f46e78fe36 + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4284271 + timestamp: 1760594266347 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da + md5: 0b367fad34931cb79e0d6b7e5c06bb1c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 932581 + timestamp: 1753948484112 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + sha256: 466366b094c3eb4b1d77320530cbf5400e7a10ab33e4824c200147488eebf7a6 + md5: 156bfb239b6a67ab4a01110e6718cbc4 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 980121 + timestamp: 1753948554003 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + sha256: 802ebe62e6bc59fc26b26276b793e0542cfff2d03c086440aeaf72fb8bbcec44 + md5: 1dcb0468f5146e38fae99aef9656034b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 902645 + timestamp: 1753948599139 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 + md5: 5b767048b1b3ee9a954b06f4084f93dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 h767d61c_7 + constrains: + - libstdcxx-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3898269 + timestamp: 1759968103436 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 + md5: 80c07c68d2f6870250959dcc95b209d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 37135 + timestamp: 1758626800002 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09 + md5: 003a54a4e32b02f7355b50a837e699da + depends: + - __osx >=10.13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 57133 + timestamp: 1727963183990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.3-h472b3d1_0.conda + sha256: 0396b5f71a5276cb1f7df83536a3950cb9b99a521f99cd8cd776024a00867d77 + md5: 4f2ac80a5f9436d965334630e8dc2d07 + depends: + - __osx >=10.13 + constrains: + - intel-openmp <0.0a0 + - openmp 21.1.3|21.1.3.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 310893 + timestamp: 1760282453767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.3-h4a912ad_0.conda + sha256: 9aeabb02db52ce9d055a5786d42440894f6eae9e74bbc0e08befb7926ccca98d + md5: 487d26872cd21fe3bfcb3d09e8d992cd + depends: + - __osx >=11.0 + constrains: + - openmp 21.1.3|21.1.3.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 285307 + timestamp: 1760282536594 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e + md5: 5b5203189eb668f042ac2b0826244964 + depends: + - mdurl >=0.1,<1 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64736 + timestamp: 1754951288511 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 891641 + timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9 + md5: ced34dd9929f491ca6dab6a2927aff25 + depends: + - __osx >=10.13 + license: X11 AND BSD-3-Clause + purls: [] + size: 822259 + timestamp: 1738196181298 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 797030 + timestamp: 1738196177597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.3-py311h2e04523_0.conda + sha256: 264528d6e73d5c902a0463d9d138607018d994b86e209df4a51945886233989d + md5: 3b0d0a2241770397d3146fdcab3b49f8 + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.11.* *_cp311 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 9416009 + timestamp: 1757505084571 +- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.3-py311hf157cb9_0.conda + sha256: 63a6c4f04df9ef36fe3b0eded7f2e668c74949995821d6dd59179764f0829a8e + md5: 3d5331d89f160b1af3c39fd7e3f1ba93 + depends: + - python + - libcxx >=19 + - __osx >=10.13 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8552704 + timestamp: 1757504936115 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.3-py311h8685306_0.conda + sha256: f9e65b819f7252557113240e83a7f33426a2086cdcd0f80f4ef95794b5bafc0f + md5: 679c1e8963299dddcaf216588f765350 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - python 3.11.* *_cpython + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.11.* *_cp311 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 7275121 + timestamp: 1757504970437 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda + sha256: e807f3bad09bdf4075dbb4168619e14b0c0360bacb2e12ef18641a834c8c5549 + md5: 14edad12b59ccbfa3910d42c72adc2a0 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3119624 + timestamp: 1759324353651 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.4-h230baf5_0.conda + sha256: 3ce8467773b2472b2919412fd936413f05a9b10c42e52c27bbddc923ef5da78a + md5: 075eaad78f96bbf5835952afbe44466e + depends: + - __osx >=10.13 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2747108 + timestamp: 1759326402264 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.4-h5503f6c_0.conda + sha256: f0512629f9589392c2fb9733d11e753d0eab8fc7602f96e4d7f3bd95c783eb07 + md5: 71118318f37f717eefe55841adb172fd + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3067808 + timestamp: 1759324763146 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 62477 + timestamp: 1745345660407 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + sha256: c97f796345f5b9756e4404bbb4ee049afd5ea1762be6ee37ce99162cbee3b1d3 + md5: 72e3452bf0ff08132e86de0272f2fbb0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22.4 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.11.* *_cp311 + - pytz >=2020.1 + constrains: + - beautifulsoup4 >=4.11.2 + - scipy >=1.10.0 + - pytables >=3.8.0 + - gcsfs >=2022.11.0 + - odfpy >=1.4.1 + - xlsxwriter >=3.0.5 + - openpyxl >=3.1.0 + - html5lib >=1.1 + - python-calamine >=0.1.7 + - qtpy >=2.3.0 + - pyxlsb >=1.0.10 + - xarray >=2022.12.0 + - pandas-gbq >=0.19.0 + - numexpr >=2.8.4 + - tzdata >=2022.7 + - pyreadstat >=1.2.0 + - lxml >=4.9.2 + - pyqt5 >=5.15.9 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - psycopg2 >=2.9.6 + - xlrd >=2.0.1 + - matplotlib >=3.6.3 + - blosc >=1.21.3 + - numba >=0.56.4 + - sqlalchemy >=2.0.0 + - fsspec >=2022.11.0 + - pyarrow >=10.0.1 + - zstandard >=0.19.0 + - bottleneck >=1.3.6 + - tabulate >=0.9.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 15337715 + timestamp: 1759266002530 +- conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.3.3-py311hca9a5ca_1.conda + sha256: 31542a3bd44f3d7f410382afd2b5fe80dcba1aaa6a9bdde9531ec24acf4be809 + md5: 3f44aba598f79565d9090a5c1762cea3 + depends: + - __osx >=10.13 + - libcxx >=19 + - numpy >=1.22.4 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.11.* *_cp311 + - pytz >=2020.1 + constrains: + - html5lib >=1.1 + - lxml >=4.9.2 + - pyreadstat >=1.2.0 + - scipy >=1.10.0 + - numba >=0.56.4 + - tabulate >=0.9.0 + - xlsxwriter >=3.0.5 + - pandas-gbq >=0.19.0 + - odfpy >=1.4.1 + - tzdata >=2022.7 + - pyqt5 >=5.15.9 + - fastparquet >=2022.12.0 + - psycopg2 >=2.9.6 + - pyarrow >=10.0.1 + - beautifulsoup4 >=4.11.2 + - pyxlsb >=1.0.10 + - numexpr >=2.8.4 + - xlrd >=2.0.1 + - zstandard >=0.19.0 + - pytables >=3.8.0 + - openpyxl >=3.1.0 + - s3fs >=2022.11.0 + - sqlalchemy >=2.0.0 + - matplotlib >=3.6.3 + - blosc >=1.21.3 + - python-calamine >=0.1.7 + - xarray >=2022.12.0 + - fsspec >=2022.11.0 + - bottleneck >=1.3.6 + - gcsfs >=2022.11.0 + - qtpy >=2.3.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 14519607 + timestamp: 1759266357305 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + sha256: 2d9350d3d16d3626fe30930026d527e3d3af4fa1ec3e6b9d4791cbb49bb186f3 + md5: ea737715ac61b431bfd5adbcd9ea0cae + depends: + - __osx >=11.0 + - libcxx >=19 + - numpy >=1.22.4 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.11.* *_cp311 + - pytz >=2020.1 + constrains: + - tabulate >=0.9.0 + - xlrd >=2.0.1 + - html5lib >=1.1 + - pyqt5 >=5.15.9 + - psycopg2 >=2.9.6 + - gcsfs >=2022.11.0 + - lxml >=4.9.2 + - pytables >=3.8.0 + - pyxlsb >=1.0.10 + - sqlalchemy >=2.0.0 + - openpyxl >=3.1.0 + - pandas-gbq >=0.19.0 + - matplotlib >=3.6.3 + - python-calamine >=0.1.7 + - numba >=0.56.4 + - beautifulsoup4 >=4.11.2 + - pyreadstat >=1.2.0 + - xlsxwriter >=3.0.5 + - fsspec >=2022.11.0 + - blosc >=1.21.3 + - odfpy >=1.4.1 + - pyarrow >=10.0.1 + - numexpr >=2.8.4 + - bottleneck >=1.3.6 + - tzdata >=2022.7 + - xarray >=2022.12.0 + - s3fs >=2022.11.0 + - zstandard >=0.19.0 + - scipy >=1.10.0 + - qtpy >=2.3.0 + - fastparquet >=2022.12.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 14389534 + timestamp: 1759266253108 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc + md5: 7da7ccd349dbf6487a7778579d2bb971 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 24246 + timestamp: 1747339794916 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a + md5: 6b6ece66ebcae2d5f326c77ef2c5a066 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 889287 + timestamp: 1750615908735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + sha256: 41053d9893e379a3133bb9b557b98a3d2142fca474fb6b964ba5d97515f78e2d + md5: 1f987505580cb972cf28dc5f74a0f81b + depends: + - colorama >=0.4 + - exceptiongroup >=1 + - iniconfig >=1 + - packaging >=20 + - pluggy >=1.5,<2 + - pygments >=2.7.2 + - python >=3.10 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 276734 + timestamp: 1757011891753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hfe2f287_1_cpython.conda + build_number: 1 + sha256: 6515ef4018fda2826570f6f5c068e26dbd3e41a8b642f052c346812b3af28789 + md5: e87c753e04bffcda4cbfde7d052c1f7a + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libuuid >=2.41.2,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: [] + size: 30812188 + timestamp: 1760365816536 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h3999593_1_cpython.conda + build_number: 1 + sha256: 42a5106ae9f2a745f258ca187f811da1736e5d2f39ce33df200b00a34cfb47e6 + md5: 30383eebcafb2bdb3f1f039f7d79fb6e + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: [] + size: 15565919 + timestamp: 1760366149530 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.14-hec0b533_1_cpython.conda + build_number: 1 + sha256: f1fc90c0929f744d0db11d1247cd97632134494cea2a99fa24996ad928e904a8 + md5: 64d46fd57bf5b2793f75fceb6f3b6189 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: [] + size: 14794480 + timestamp: 1760366123572 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0 + md5: 88476ae6ebd24f39261e0854ac244f33 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/tzdata?source=hash-mapping + size: 144160 + timestamp: 1742745254292 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + build_number: 8 + sha256: fddf123692aa4b1fc48f0471e346400d9852d96eeed77dbfdd746fa50a8ff894 + md5: 8fcb6b0e2161850556231336dae58358 + constrains: + - python 3.11.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7003 + timestamp: 1752805919375 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 + md5: bc8e3267d44011051f2eb14d22fb0960 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping + size: 189015 + timestamp: 1742920947249 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 + depends: + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 282480 + timestamp: 1740379431762 +- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + sha256: 53017e80453c4c1d97aaf78369040418dea14cf8f46a2fa999f31bd70b36c877 + md5: 342570f8e02f2f022147a7f841475784 + depends: + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 256712 + timestamp: 1740379577668 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 + md5: 63ef3f6e6d6d5c589e64f11263dc5676 + depends: + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 252359 + timestamp: 1740379663071 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda + sha256: edfb44d0b6468a8dfced728534c755101f06f1a9870a7ad329ec51389f16b086 + md5: a247579d8a59931091b16a1e932bbed6 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.10 + - typing_extensions >=4.0.0,<5.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=compressed-mapping + size: 200840 + timestamp: 1760026188268 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.1-ha3a3aed_0.conda + noarch: python + sha256: fab29f194ae2facb591126acd35bcb22cc00283608c6214d555362623df7560f + md5: 6c6adad295a85b54d8c4ec889c6bda18 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 10982968 + timestamp: 1760643965238 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.14.1-hba89d1c_0.conda + noarch: python + sha256: b7f844189198c8f3dfce8ff5048c42fbc5f800d71eef00ecb0196cc61fbd40b5 + md5: 322ea9f1fc7ac625cdc509ee83d58607 + depends: + - python + - __osx >=10.13 + constrains: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 10848684 + timestamp: 1760644103607 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.14.1-h492a034_0.conda + noarch: python + sha256: 876780e215d7cbeea5b3ed090d0bc32d811e0c8b5b8d01a528d3864013307ecb + md5: cafec33d1bff4183d7c891860e8578d9 + depends: + - python + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping + size: 9937951 + timestamp: 1760644202217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.2-py311hc3e1efb_0.conda + sha256: c10973e92f71d6a1277a29d3abffefc9ed4b27854b1e3144e505844d7e0a3fe7 + md5: 3f5b4f552d1ef2a5fdc2a4e25db2ee9a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - joblib >=1.2.0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22.0 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - scipy >=1.8.0 + - threadpoolctl >=3.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9785405 + timestamp: 1757406401803 +- conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.7.2-py311had5a2ce_0.conda + sha256: 7adab19ad8211ab267366046c199bda63b85a11833d73901cd8137cf555ddf51 + md5: 35e84df764fb918f99c17602376d6a84 + depends: + - __osx >=10.13 + - joblib >=1.2.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - numpy >=1.22.0 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - scipy >=1.8.0 + - threadpoolctl >=3.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9157602 + timestamp: 1757407090554 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.2-py311h0f965f6_0.conda + sha256: ef398e0e3e57680fe0422ba56245c54b3d7114c7a6e31ff0367bfbd7c553c05b + md5: 5d571c9769910a3377d13230be348f47 + depends: + - __osx >=11.0 + - joblib >=1.2.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + - numpy >=1.22.0 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + - scipy >=1.8.0 + - threadpoolctl >=3.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + size: 9169335 + timestamp: 1757407114262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.2-py311h1e13796_0.conda + sha256: e87176da9a36babfb2f65ca1143050b07581efea67368999808378c1c96163fd + md5: 124834cd571d0174ad1c22701ab63199 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + size: 17289352 + timestamp: 1757682174416 +- conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.16.2-py311h32c7e5c_0.conda + sha256: 8d8e69daa49c3c876fcacc31d31698d6d103e133c87c3d046fa67be4c0ad4a94 + md5: 8bf3fee43462b21388d04251f37159e6 + depends: + - __osx >=10.13 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 15295538 + timestamp: 1757683511655 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.16.2-py311h2734c94_0.conda + sha256: 972cd4e6379ad2ff96e36fd629c4dd0b2f32328f858848bfab8ad9a95c7f1d5e + md5: dfe66d7dfba5ee328467bc10c4df4718 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 14047114 + timestamp: 1757684291857 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 + md5: 4de79c071274a53dcaf2a8c749d1499e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 748788 + timestamp: 1748804951958 +- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef + md5: 7c3c2a0f3ebdea2bbc35538d162b43bf + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14462 + timestamp: 1733301007770 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 18455 + timestamp: 1753199211006 +- pypi: ./ + name: tap-linear + version: 0.1.0 + sha256: 954022303fbdee173cda07704dddbe8645794c90a691b850628cd7a514a170fc + requires_dist: + - abdev-core + - pandas>=2.0 + - numpy>=1.24 + - scikit-learn>=1.3 + - typer>=0.9.0 + requires_python: '>=3.11' + editable: true +- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + sha256: 6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd + md5: 9d64911b31d57ca443e9f1e36b04385f + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/threadpoolctl?source=hash-mapping + size: 23869 + timestamp: 1741878358548 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 + md5: a0116df4f4ed05c303811a837d5b39d8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3285204 + timestamp: 1748387766691 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + sha256: b24468006a96b71a5f4372205ea7ec4b399b0f2a543541e86f883de54cd623fc + md5: 9864891a6946c2fe037c02fca7392ab4 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3259809 + timestamp: 1748387843735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e + md5: 7362396c170252e7b7b0c8fb37fe9c78 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3125538 + timestamp: 1748388189063 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + sha256: cb77c660b646c00a48ef942a9e1721ee46e90230c7c570cdeb5a893b5cce9bff + md5: d2732eb636c264dc9aa4cbee404b1a53 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=compressed-mapping + size: 20973 + timestamp: 1760014679845 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhdb1f59b_0.conda + sha256: e4708f3f7f72e92511b1f6defca8cac520cef1af3cda92c3b7901731f7ddcb75 + md5: 27ec7c3f99366fa64228c3ee4ab49cbc + depends: + - typer-slim-standard ==0.20.0 h65a100f_0 + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/typer?source=hash-mapping + size: 79367 + timestamp: 1760982314002 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_0.conda + sha256: 08904a433b7ab6b2e0267576043a8397bb3ce7296d71aef34ae7d2506b2c192a + md5: d8ad446a00bbd434d6d03cdcc9b46524 + depends: + - python >=3.10 + - click >=8.0.0 + - typing_extensions >=3.7.4.3 + - python + constrains: + - typer 0.20.0.* + - rich >=10.11.0 + - shellingham >=1.3.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/typer-slim?source=hash-mapping + size: 47419 + timestamp: 1760982313997 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h65a100f_0.conda + sha256: a4726dec9ec806757f5f0fee65f54f790d3f4854a869bd4cd2c2805c54b52d37 + md5: cfd4be2a44e441b12b58a7d04c9434e9 + depends: + - typer-slim ==0.20.0 pyhcf101f3_0 + - rich + - shellingham + license: MIT + license_family: MIT + purls: [] + size: 5294 + timestamp: 1760982314002 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: [] + size: 122968 + timestamp: 1742727099393 diff --git a/models/propermab_linear/pixi.toml b/models/propermab_linear/pixi.toml new file mode 100644 index 0000000..4dd22ec --- /dev/null +++ b/models/propermab_linear/pixi.toml @@ -0,0 +1,31 @@ +[workspace] +name = "tap-linear" +version = "0.1.0" +description = "TAP Linear baseline - Ridge regression on TAP features" +channels = ["conda-forge"] +platforms = ["linux-64", "osx-64", "osx-arm64"] + +[dependencies] +python = "3.11.*" +numpy = ">=1.24" +pandas = ">=2.0" +scikit-learn = ">=1.3" +typer = ">=0.9" + +[pypi-dependencies] +abdev-core = { path = "../../libs/abdev_core", editable = true } +tap-linear = { path = ".", editable = true } + +[environments] +default = [] +dev = ["dev"] + +[feature.dev.dependencies] +pytest = ">=7.0" +ruff = ">=0.1" + +[feature.dev.tasks] +# Development tasks only - orchestrator will call train/predict directly +lint = "ruff check src && ruff format --check src" +test = "pytest tests -v" + diff --git a/models/propermab_linear/pyproject.toml b/models/propermab_linear/pyproject.toml new file mode 100644 index 0000000..5c1d7b9 --- /dev/null +++ b/models/propermab_linear/pyproject.toml @@ -0,0 +1,23 @@ +[build-system] +requires = ["setuptools>=64", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "tap-linear" +version = "0.1.0" +description = "TAP Linear baseline - Ridge regression on TAP features" +requires-python = ">=3.11" +dependencies = [ + "abdev-core", + "pandas>=2.0", + "numpy>=1.24", + "scikit-learn>=1.3", + "typer>=0.9.0", +] + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.package-dir] +"" = "src" + diff --git a/models/propermab_linear/src/propermab_linear/__init__.py b/models/propermab_linear/src/propermab_linear/__init__.py new file mode 100644 index 0000000..bede190 --- /dev/null +++ b/models/propermab_linear/src/propermab_linear/__init__.py @@ -0,0 +1,4 @@ +"""TAP Linear baseline for antibody developability prediction.""" + +__version__ = "0.1.0" + diff --git a/models/propermab_linear/src/propermab_linear/__main__.py b/models/propermab_linear/src/propermab_linear/__main__.py new file mode 100644 index 0000000..b546135 --- /dev/null +++ b/models/propermab_linear/src/propermab_linear/__main__.py @@ -0,0 +1,7 @@ +"""Entry point for model CLI.""" + +from .run import app + +if __name__ == "__main__": + app() + diff --git a/models/propermab_linear/src/propermab_linear/feature_store_top5.csv b/models/propermab_linear/src/propermab_linear/feature_store_top5.csv new file mode 100644 index 0000000..e42ff4e --- /dev/null +++ b/models/propermab_linear/src/propermab_linear/feature_store_top5.csv @@ -0,0 +1,327 @@ +antibody_name,hyd_patch_area_cdr,pos_patch_area,dipole_moment,aromatic_asa,exposed_net_charge,file_name +abagovomab,396.057012790627,323.04398581986743,255.2787410521628,1074.3402559079111,-48.37999999999947, +abituzumab,362.751558732205,278.35975745737466,341.26756084278213,912.1650915754524,-58.1949999999992, +abrezekimab,302.60596910898664,135.3222220915301,245.5524656065765,715.1214559343463,-57.39499999999921, +abrilumab,350.494707140459,112.6683635614016,436.6227676231808,736.3349609585981,-59.93999999999913, +adalimumab,274.5045714150897,75.55750145794511,161.93001858700285,718.5876794067393,-47.964999999999314, +aducanumab,168.83471736333453,616.0565975787707,386.0397445410232,729.9665318679449,-38.20499999999986, +alemtuzumab,106.47338244061852,411.72544016231257,278.8953574262234,565.618279492166,-56.39999999999916, +alirocumab,353.9971167802039,107.44693993918256,292.7154411836682,663.2520814130876,-49.25499999999963, +amatuximab,202.1690227065833,389.6373542496393,428.54058629080833,932.0500155500074,-44.37499999999969, +andecaliximab,463.34627126691777,257.8569379816349,116.6118649903093,992.032625376815,-59.21499999999919, +anetumab,407.7545610130941,149.60611548346137,152.53799426825276,785.9815530069341,-48.35499999999961, +anifrolumab,227.3741208755945,148.2104342367283,92.73153650035523,668.2740755593377,-55.219999999999295, +anrukinzumab,331.7926761446829,97.54785265587,247.80466094727987,1053.4495180500735,-52.53499999999938, +atezolizumab,614.5526648111218,198.5495074724041,57.49528150427076,1193.702110292674,-51.759999999999415, +avelumab,295.34296287595413,174.27545530536892,342.3533443507286,672.9000660228079,-41.92499999999982, +bapineuzumab,234.0678199839365,545.2789970120522,416.3430154836695,833.0975239569296,-47.47499999999947, +basiliximab,325.07544078237663,462.0473133280907,316.69742393266023,1030.5699889797231,-37.66499999999968, +bavituximab,448.4754168665645,96.5779906300151,334.1160850037172,1055.6208679674746,-60.64499999999928, +belantamab,327.5369500010511,517.1050862358204,251.7458594853176,861.0510806575265,-58.21999999999922, +belimumab,545.5274552348424,371.4476419068756,452.4426496312,566.0530494458651,-59.30499999999925, +bemarituzumab,213.37260930017231,341.723893586718,177.64613051471002,799.9975540466503,-52.57499999999945, +benralizumab,615.8391922029268,473.4233574015864,218.17921688567048,1150.3819498730722,-53.904999999999376, +bevacizumab,529.7728870412641,116.22014998941896,144.49177831777928,1265.0348448029804,-54.07499999999936, +bezlotoxumab,209.90033155926977,437.3878502340057,238.0632245306319,815.9192337226353,-51.824999999999285, +bimagrumab,361.2689297752369,403.5904479256617,362.7083914597802,966.8992054865548,-42.67999999999981, +bimekizumab,397.5514753684338,71.66375388393794,164.34939683669026,929.8187995462888,-50.15999999999945, +bleselumab,457.9118913065663,486.8418467545615,270.6644544072624,874.7579647602652,-53.85499999999937, +blosozumab,406.17341069020745,33.24172382250217,454.3604886875593,866.7873843359467,-56.87499999999918, +bococizumab,305.198393952796,542.9292933988467,242.7274253179024,984.922949981009,-42.76499999999981, +brazikumab,441.8674931766644,47.655758593279145,173.85409685242325,957.708950978101,-48.11499999999965, +brentuximab,401.05979881841273,0.0,325.69949459643846,1091.1034945081828,-57.544999999999376, +briakinumab,353.4899230308698,508.3190086999949,476.12666954586,833.5716236438866,-44.21999999999978, +brodalumab,185.9314025160909,375.45572233758566,270.1264371483581,880.3582582147862,-53.0649999999994, +brontictuzumab,348.73854825833,263.60652310554343,212.42863111770484,970.1852520379224,-47.9749999999994, +budigalimab,247.3206666190017,26.807484534962537,112.9218611880954,715.9388725455661,-59.92499999999911, +burosumab,418.4106773655688,103.2565278945466,249.1858839155711,672.8591206743024,-54.57499999999936, +cabiralizumab,435.76330563594377,22.02504461643861,341.045971784556,1200.4457296315877,-66.42999999999931, +camidanlumab,313.1791958672669,291.40705427536466,290.35981249127894,682.5734075226239,-46.63999999999956, +camrelizumab,468.2354635308928,96.54544470148552,219.55417475138648,909.356459387761,-45.77999999999948, +carlumab,435.2089284014926,24.647786119186605,143.80024178342006,802.0352071829474,-61.6799999999993, +cemiplimab,392.1203803202367,124.48520881570496,280.7401581818824,939.0075852277812,-47.02999999999962, +certolizumab,538.3600095008103,255.21116038720672,86.02243891128751,1340.4348657381686,-52.649999999999366, +cetrelimab,375.36579217192246,108.90317422766526,69.56730610396812,1038.8487926312214,-56.95999999999924, +cetuximab,279.45299689699084,179.70024249661003,341.42519196290647,891.8031866566292,-53.23999999999955, +cixutumumab,730.0556171226046,437.8574156297894,371.7738872325066,1103.047132072202,-58.13499999999915, +clazakizumab,277.00515693731506,22.825773559241306,101.46540112080396,850.1825145922323,-61.50999999999917, +codrituzumab,306.1810070604105,343.38370476734326,267.2895827137661,733.0457425401436,-55.04499999999931, +coltuximab,219.22607958773733,111.67050645149538,250.90974769817964,1016.2573544710784,-50.64999999999933, +concizumab,318.0712029197998,95.82350472198428,231.0798516532054,799.8712022432527,-55.44499999999941, +crenezumab,206.34904887423133,98.15210679410114,235.2147534278924,693.0949215671725,-54.624999999999446, +crizanlizumab,291.97116932840447,59.93430844869591,372.2739232271159,1021.6668060771322,-56.96499999999918, +cusatuzumab,114.22900870162088,27.49023068603696,245.50338124746503,575.1983654975704,-55.68999999999931, +dacetuzumab,196.76936268621895,347.8629453005673,170.66634487027738,715.4763473940615,-47.7499999999994, +daclizumab,253.41124184329743,239.13748127673497,159.3790986644459,911.232747871553,-54.11499999999915, +dalotuzumab,230.7485435898973,300.9116691893008,286.55341836091714,714.824500216657,-50.78499999999948, +daratumumab,374.1332761193895,73.89303813292531,192.12973934635363,975.2441053058078,-52.99499999999937, +denosumab,265.1605736210723,140.68605803180083,324.3935044484521,594.2016188185244,-49.49499999999953, +depatuxizumab,157.02820551232634,161.3442428982345,335.94133691586006,699.5725079619482,-45.16499999999971, +dinutuximab,322.8704097409409,331.7456259586766,352.45197035503656,722.9035459749603,-51.50499999999937, +domagrozumab,345.0875904081836,218.7607981550683,197.95143874392383,1063.0732853615746,-46.2349999999996, +dostarlimab,377.9482904354256,69.52351936268951,95.4041522176472,1380.6017489581152,-51.67499999999943, +duligotuzumab,276.4020692573869,0.0,234.9979185760078,816.7674697694155,-65.2799999999992, +dupilumab,315.6519394981689,84.37076307211126,442.6485262052026,776.5065258634936,-52.97999999999954, +durvalumab,327.8096021187304,147.8623370780503,174.89136142261734,962.7652036998578,-51.1799999999994, +eculizumab,394.9503457128031,53.15053586463801,386.5714865097651,822.3480778036911,-52.17999999999941, +efalizumab,328.5688563727024,258.28729522082386,146.0916967111257,1001.301023059413,-44.20499999999944, +eldelumab,513.8010177798899,95.91104903561911,72.03939364561673,1003.3938763184956,-48.33999999999927, +elezanumab,305.1834626078625,125.652756855343,175.6121709309541,706.0129431798445,-50.43499999999959, +elotuzumab,410.2126271851913,52.57294898546836,52.026085798594416,683.6643130244316,-57.19499999999934, +emactuzumab,298.6413569436268,183.35845538900568,253.7439824542009,851.1060652367657,-57.31999999999927, +emapalumab,405.18556636238577,71.82294802465708,367.3400061861593,853.5494474317861,-55.419999999999504, +emibetuzumab,238.1290707703551,382.9862875433592,352.99735486190235,903.6828103233238,-44.07499999999964, +enavatuzumab,326.64002420432666,95.80213773864833,98.31324589796137,1032.469287295908,-54.3399999999994, +enokizumab,401.2340494821678,107.52282155771567,236.72693051299825,1204.8387966358382,-54.75999999999923, +epratuzumab,317.4354970390814,296.66786686629973,261.57094301823093,889.5102528188364,-54.624999999999226, +eptinezumab,363.9876411898545,49.741190290314776,109.14918960208324,771.8013663745252,-52.31499999999947, +erenumab,413.4704031995759,369.7069246281366,233.82105116092552,1104.6729415967357,-35.22499999999999, +etaracizumab,209.778298878998,297.7706622161128,374.9787236578347,599.7696136450681,-47.70499999999953, +etrolizumab,257.58334883231,320.1442691147812,220.7318313158747,841.5931078190679,-49.81999999999947, +evinacumab,385.835336313639,50.85041949451903,198.1732482055591,807.5326387315619,-52.39499999999935, +evolocumab,322.33161053517307,88.67839412742534,250.7640166876472,981.4200983660234,-54.564999999999394, +farletuzumab,435.8829263642562,159.24425634146132,194.5463696116998,1020.6840311714884,-55.66499999999936, +fasinumab,336.5652571871363,91.59207311340542,419.19891218548105,689.048148895885,-53.39499999999913, +fezakinumab,483.3792428404041,26.739868888626496,500.5888998896029,1003.3372869776113,-51.00499999999949, +ficlatuzumab,315.2730230411844,34.03813141745886,303.8471868298823,993.7919966149828,-53.25999999999943, +figitumumab,486.1677953380852,224.17563569086025,189.17745254514213,1249.389046444958,-46.59999999999941, +fletikumab,358.6348725312928,50.70556336462111,242.60837726259948,962.5415676861468,-57.054999999999126, +foralumab,522.925309827877,443.88159020831085,430.56736470354286,1092.4191366281436,-41.11999999999979, +fremanezumab,514.0432303005739,143.5341000079242,277.6543990214752,1006.983752512692,-54.22999999999925, +fresolimumab,554.3734767147073,27.907757445777392,121.5998732834109,547.3732144019687,-55.18499999999922, +fulranumab,346.9162538427552,127.30830444732229,271.5878606662143,949.9811113072568,-53.51499999999927, +galcanezumab,484.94343499377857,325.1757956791283,193.1220914552915,1090.617445656712,-51.53499999999938, +galiximab,585.6513830533332,52.6958413131211,252.0460562401508,668.2979032341515,-56.48999999999945, +ganitumab,197.58893522203735,180.8286313265484,297.3814910419756,569.7518485037771,-49.30499999999952, +gantenerumab,276.62817695625466,827.50773124325,473.92147155617744,860.0768678440378,-44.934999999999526, +gatipotuzumab,256.7492325645952,80.34725897116698,309.0398710419788,758.4085381859779,-53.814999999999486, +gemtuzumab,450.10101728213016,22.12631937794236,86.42255101928008,1130.9305246980657,-53.36499999999932, +gevokizumab,287.4090996162205,331.7719517861621,115.17991806955042,693.6528542866698,-49.14999999999948, +gimsilumab,515.7877005606639,220.03788197003408,268.44264450324675,937.0981410137208,-48.47999999999953, +girentuximab,341.0440790719368,233.7007172936433,177.8368992009304,892.6202609272493,-40.29999999999984, +glembatumumab,370.19316753256135,183.1147887301589,107.44563819004136,1049.565414211983,-50.49999999999936, +golimumab,316.5590612372748,216.3960710524472,342.3648794764389,919.3350137221817,-48.71999999999952, +guselkumab,541.5328815897752,306.3742567047801,335.0266355616842,985.6736200884302,-41.86499999999987, +ianalumab,628.5156777126826,225.21041214602036,334.1444718780828,1021.73260791921,-50.9899999999994, +ibalizumab,280.29610067263275,135.283173143141,178.04308928004014,1119.2454656487623,-49.709999999999646, +icrucumab,401.03406469521343,83.34846253038532,98.92027500190754,913.1845395523555,-54.48499999999914, +imgatuzumab,217.97978732520008,386.7340721432619,171.73270436794354,861.4436626488076,-46.234999999999474, +inclacumab,305.1481472025825,213.71317036671613,228.7758612780501,968.171020692532,-50.12999999999934, +inebilizumab,420.5048083676783,27.136861391097412,89.45048604936059,826.1020265937517,-59.3799999999993, +infliximab,370.5548223185399,71.29231550821171,469.9928655554433,872.439872570114,-57.06999999999928, +inotuzumab,416.8272744421734,410.8668937995516,251.79287035955863,1309.7413824732655,-46.20499999999951, +intetumumab,219.7390242572268,195.96441584695052,151.07917814669244,837.617786006795,-52.83999999999946, +ipilimumab,419.03946687399576,208.21878279854096,206.78535608081503,1074.0554074992056,-45.27499999999964, +isatuximab,411.319916040616,231.16512195959132,250.78319924268504,1133.8901255506294,-54.33499999999938, +iscalimab,344.4646940860309,53.65689208494396,209.96337693981636,798.8232056816754,-52.674999999999365, +itolizumab,352.8401514654821,318.82874136580773,376.54989571106273,890.0261020375111,-51.78499999999946, +ixekizumab,477.7976383696294,223.7404923669962,303.387835853637,1019.521181075783,-51.74499999999925, +ladiratuzumab,412.8469283993199,102.04995408141666,390.8195363253592,776.5008425472669,-54.71999999999927, +lampalizumab,265.19078569421345,112.4026509437732,524.620435017302,581.831343081479,-60.229999999999386, +lanadelumab,458.7690268412093,239.74677631835183,278.7781548297549,657.3683819092743,-46.18999999999974, +landogrozumab,358.2910929247009,321.50142736239115,338.2968917284384,791.3521502803815,-50.78499999999956, +lebrikizumab,562.9960606985564,100.96965115507038,268.3068934300851,969.8525172249432,-58.75999999999932, +lenzilumab,163.11326542060436,743.2548774087212,404.1407926043143,897.7138086618214,-41.84499999999971, +lexatumumab,337.5096604652436,163.76662253929288,269.9301061949336,706.9396322411812,-54.84499999999933, +ligelizumab,424.6320739847164,0.0,139.3937692558149,1282.3897327532827,-54.90499999999925, +lintuzumab,347.403971335106,177.059405710519,110.24418061645213,1040.497671689396,-47.67999999999948, +lirilumab,489.6926676201248,47.4246311888798,65.91981656887066,1288.3335869157593,-51.63999999999939, +loncastuximab,240.361394900047,135.80311071391765,212.83544096928924,1018.5994451348166,-51.27499999999928, +lorvotuzumab,369.2178113374041,452.373953816102,206.5598123722783,721.0683136137144,-45.55499999999964, +lucatumumab,353.46983204072745,80.25371461025352,209.00755630833703,801.3502521548116,-54.22499999999935, +lumiliximab,308.4630037646489,99.13776188640024,182.0871848347576,936.8747194174548,-46.28499999999971, +lumretuzumab,289.9235157273554,354.46089470794504,351.71515704056134,1083.2094496774305,-56.709999999999376, +margetuximab,356.94098081874915,171.0128649676449,153.66834155214806,1170.60721944054,-48.80999999999954, +matuzumab,358.9900414259165,136.89388436613828,220.22382176344215,966.563052736315,-59.32999999999927, +mavrilimumab,587.5187588455036,50.6741681396579,365.73687205755385,654.5136021989798,-59.38999999999909, +mepolizumab,182.39151203733104,176.72612820114156,285.9836250424628,481.57764944019215,-58.10499999999927, +milatuzumab,277.5208731489124,467.8598430158353,224.0527464045236,578.884601156031,-45.76499999999936, +mirikizumab,460.0249138865864,362.6846682533844,347.854553796545,965.4645679153,-49.64999999999943, +mirvetuximab,259.9309779791085,116.2749299660523,188.2112708777404,1008.6904266460348,-49.144999999999534, +mitazalimab,414.78475557227057,157.92627975052264,401.5452081005439,696.3925157140669,-41.98999999999969, +mogamulizumab,484.02472962678206,164.25314980416113,334.67694437206745,692.3243763851142,-45.12499999999964, +monalizumab,431.7727130910696,156.99088480085965,187.8597095007696,1196.9537928741263,-59.36999999999911, +mosunetuzumab,279.80524249896393,367.69936514914383,308.4164789995973,888.6952158330731,-51.88999999999925, +motavizumab,320.6640744649054,147.32199100806224,195.0402991479014,797.7576389773936,-47.28999999999933, +muromonab,274.4631929823877,378.6553389852695,445.3371556095088,901.9352890535362,-43.54999999999956, +natalizumab,378.6641572164758,330.8494823584042,43.01065795431943,1021.9630150749468,-52.46499999999942, +necitumumab,249.5359122649835,136.18559212504482,171.01668791367774,936.2446094165034,-47.20499999999947, +nesvacumab,363.6469040776132,176.4985488962108,87.76592297766769,825.9631192342367,-50.079999999999416, +nimotuzumab,289.22052183898614,212.4664972760375,97.8608607035609,872.9866425803107,-61.51999999999914, +nivolumab,291.2845829890237,106.79297052806557,312.078962997082,863.3399645434962,-54.87499999999937, +obexelimab,410.13434305776775,110.29770397710776,401.75664488394966,1152.0932676526772,-50.56499999999957, +obiltoxaximab,192.8258030883389,384.65706875217984,201.2595765825658,653.5173068510702,-54.80999999999923, +obinutuzumab,329.7727129337525,109.6201897272286,187.57580181896037,834.6880435704119,-47.5349999999996, +ocrelizumab,317.623821998583,344.3303215816898,150.00801982000053,1040.2187534006082,-41.58499999999973, +ofatumumab,337.62113451956907,91.77823359508795,237.1545558898092,979.9987342316166,-53.4149999999994, +olaratumab,445.1986822412928,240.7369518759792,238.22133265544815,1251.829619093831,-57.13499999999933, +oleclumab,387.832674124257,130.19522931143518,395.2862976938391,611.1446945186449,-46.09999999999985, +olokizumab,335.8391942347935,90.03947420006588,248.3295657786866,1217.2362907356255,-48.07999999999943, +omalizumab,397.987332187217,83.76408098143148,237.59139988117136,1019.4424950426152,-58.78499999999936, +omburtamab,195.2082769077088,117.43806108825744,210.75483804894796,760.3449090010168,-48.39999999999954, +onartuzumab,510.3036962735773,184.51438455940848,233.22928074217768,1092.52855899472,-47.81499999999936, +opicinumab,268.429741032286,86.28686217788122,118.83976876834387,825.4820121320661,-55.95499999999927, +orticumab,300.4744387097938,321.0232252217997,466.47704674978615,642.7853407117511,-37.649999999999935, +osocimab,340.8135225772716,85.78809058863132,250.31412604531815,977.662285210239,-55.36499999999935, +otelixizumab,197.12392829273904,90.80162366653144,454.5120308095724,936.1892744133238,-54.52499999999948, +otlertuzumab,393.8924843299313,231.1557479245732,231.9997854425923,1041.4763785359396,-55.29999999999942, +ozanezumab,534.9999514146481,272.2516858209957,189.22943846404803,869.6123276146483,-45.799999999999706, +palivizumab,247.32889494994745,243.0416250606713,209.2872610621096,628.7432644892046,-49.819999999999474, +pamrevlumab,244.3747534335833,63.60924372274737,199.30938102562763,984.3877031753372,-48.329999999999536, +panitumumab,126.2009614361211,104.92515932447516,293.531959043977,530.894638433274,-64.74999999999919, +panobacumab,335.747113464838,156.33994035445397,132.22964468518643,1115.8705363845315,-50.98999999999948, +parsatuzumab,436.5749492425281,148.73458649740323,125.02029669746764,751.2769747220334,-60.46499999999916, +patritumab,364.6234127525293,238.3249256148013,289.1540740153707,993.982464003895,-48.154999999999625, +pembrolizumab,266.3988044982293,86.23626658579506,290.500338171637,1062.0964936286468,-54.27999999999923, +pertuzumab,353.4734097181714,136.02810965478085,73.91884371222304,836.2637711753295,-54.68499999999933, +pidilizumab,363.032506667632,214.4344642400516,130.0658993018239,1094.3562216793314,-46.58499999999943, +pinatuzumab,292.1354483922863,129.58309549217202,65.62036099352534,830.6174924562557,-55.52999999999926, +plozalizumab,421.2879888213466,352.0588231625952,180.2811618493797,830.3324484337957,-44.8399999999997, +polatuzumab,276.15219011110105,30.60995372405217,307.2566341666066,709.6798442347745,-57.209999999999305, +ponezumab,542.115410516961,346.784284898254,160.2380347441951,1014.8444401444328,-54.684999999999214, +prasinezumab,384.5509620614094,470.4646835149902,271.78712588291665,913.7739207117633,-44.934999999999626, +prezalumab,606.2058223683263,152.9506126540344,182.67075591550943,1048.1426023514532,-55.15999999999929, +prolgolimab,274.0593153360016,186.4203895266113,229.1412086772953,703.3228357245514,-51.90999999999958, +quilizumab,442.334116002458,54.01426058465872,101.46236895097044,954.3148444816532,-53.19499999999925, +racotumomab,128.6420860465193,42.40599477031277,264.9833073400329,1008.3814767064392,-61.08999999999912, +radretumab,377.6239321359808,304.1349572935519,273.26724607266493,842.5680246016976,-47.694999999999546, +ramucirumab,267.4520742897158,122.46498968584,254.27578373945897,921.7510696363584,-47.114999999999554, +ranibizumab,640.7011093788241,77.2699352960393,99.0232855642835,1319.953027297564,-55.90999999999938, +relatlimab,343.92169730277806,133.91276274694513,262.5845191658152,1033.4758595033477,-56.29999999999925, +reslizumab,344.5900968495047,96.23825290797872,122.92004073342488,983.2601887156112,-54.844999999999374, +rilotumumab,385.1562378407704,252.67463994980832,124.31962773404165,1113.364769521966,-51.954999999999295, +rinucumab,227.29677195850007,283.8980467290063,354.869330232391,631.3855366751166,-52.309999999999285, +risankizumab,316.4789117064886,282.93574509401753,167.8742805586079,769.9706772785634,-47.06999999999945, +rituximab,307.64344284813,344.6878647130902,132.53986114909293,952.561098110732,-42.469999999999615, +robatumumab,402.4800655228746,197.4752688032657,268.5355068194034,821.2061048818506,-49.5399999999994, +romosozumab,199.12616290398563,125.89598525951008,385.043886641941,825.5341321740132,-60.10499999999903, +rontalizumab,364.0364637532613,120.46662638541952,222.97427156938392,969.5269070430786,-58.87499999999918, +rovalpituzumab,192.199608570531,24.677555164075653,214.7447000922729,956.5136955797676,-62.31499999999912, +rozanolixizumab,541.7418189571193,226.96976121539927,161.3897833116864,706.7961267539908,-46.019999999999634, +sarilumab,388.2882302628823,57.467797221127846,173.47535483607604,777.8721997923356,-49.82999999999952, +satralizumab,312.06179367008235,0.0,654.0935699123473,522.0173430044119,-69.92499999999917, +secukinumab,458.4212741081333,176.79458704320885,161.00436968122276,931.1801428427552,-55.469999999999146, +selicrelumab,484.8393490202026,211.67975348889075,206.10763835323004,1064.2003732354217,-51.2949999999993, +seribantumab,447.04093860968896,94.08007062871847,343.7697618468535,711.2054482177939,-39.53999999999992, +setrusumab,362.6483090429603,20.346813022846323,323.51447685734644,976.9718270139416,-59.3249999999994, +sifalimumab,232.32925066418449,231.89849435966337,206.49744568598,911.5342759607422,-49.52999999999933, +siltuximab,590.1528533560758,171.22693175452022,112.90488231354968,1153.288381204162,-49.19999999999949, +simtuzumab,245.5212367811945,221.3021653313341,136.47086403886226,942.7574426010086,-46.73499999999972, +sintilimab,324.52670649317065,163.42927543624924,102.80872737639868,613.7192641363615,-54.23499999999926, +sirukumab,577.4085474615687,68.2690032393292,337.69855003455405,1111.402908439852,-49.44999999999949, +solanezumab,214.99608831230947,149.21323669032768,179.79799842216906,687.2234011488773,-44.58999999999971, +spartalizumab,232.84273600612312,77.5594166595563,205.94777828664337,889.2781986793012,-56.6999999999993, +sutimlimab,382.861087282054,344.1836880772491,296.9981622777315,904.6426753044796,-44.90499999999965, +tabalumab,381.74377410323433,295.8470195594241,149.92477604117607,1137.4783499351522,-58.10999999999923, +tanezumab,444.3061671540932,259.76646577876903,114.16468993379536,951.8633695697898,-55.7899999999993, +tarextumab,352.93086784458507,248.634953275968,355.6286967188349,742.6841300188441,-49.68499999999949, +tavolimab,412.3605250867148,315.324305720091,159.42872670965164,1166.3153229404245,-55.90499999999932, +telisotuzumab,325.66036736416794,46.41674504931406,394.2116112897442,687.2696076211258,-58.79499999999934, +teplizumab,193.5316193818438,443.6085241917043,521.5533944049046,888.6011692538881,-43.10999999999978, +teprotumumab,244.7684464194769,297.9302803764867,266.7010537474259,774.3693219536244,-42.58499999999973, +tezepelumab,580.5562813196336,73.83560128925492,318.55083309241377,847.781458595605,-47.77999999999975, +tigatuzumab,383.1441968942008,378.028421432292,186.92854636908868,932.307156514341,-49.06499999999944, +tildrakizumab,483.4440441702213,134.57199116331643,258.2565192734686,1051.057507739588,-54.31999999999935, +tislelizumab,376.58423737233534,220.8395499060108,189.06558550001424,1026.2865608895893,-54.259999999999415, +tisotumab,317.5173865242769,102.70118846724584,227.50609016977296,1013.5105927174532,-44.78999999999964, +tocilizumab,275.87279124587684,380.59398708290166,235.09167761442208,601.5815386291519,-55.174999999999365, +toripalimab,410.3375070798642,100.91009904035228,223.77908617241872,688.1590567608124,-60.069999999999126, +tovetumab,318.46451410647296,391.5036637728541,180.7030700866326,666.6425408934219,-43.34999999999968, +tralokinumab,358.6111717060087,111.24779623945577,226.17087494927856,694.0038820879665,-51.35999999999958, +trastuzumab,332.2747372747453,165.0407219473475,185.9327494483409,1021.476959509308,-48.3999999999994, +tregalizumab,500.9754847575304,81.44077175939769,321.5477855535268,951.1243479480008,-60.124999999999176, +tremelimumab,425.5086358258666,131.34970073177772,229.5367216219012,1169.3334909895425,-45.66999999999972, +ublituximab,400.7290904451231,330.3771045070844,171.58108553295042,1291.2095051762085,-47.94499999999943, +urelumab,502.7925272704674,115.3237808014668,200.8499109436851,1216.7458475216338,-59.04999999999919, +ustekinumab,126.2708886437145,378.79259347561526,210.2824738225552,688.8973929071594,-54.48999999999941, +utomilumab,613.7423893515521,31.226114868452783,272.4508237479557,1218.218460535213,-47.67999999999951, +vadastuximab,204.04039789467805,115.41519286714733,257.36688278717605,965.995162414708,-55.86999999999933, +varlilumab,317.15962043170214,324.54581669923016,204.4096391871888,1033.450527255251,-47.22999999999955, +vatelizumab,435.3521007162078,114.32605219102489,430.9417893909158,956.6467614372216,-48.48999999999942, +vedolizumab,309.81916607648003,133.16266349706956,220.16712298130875,936.1733477954256,-56.37999999999912, +veltuzumab,306.73156566866226,208.117136445988,123.40217493248794,964.4687568356856,-58.33999999999921, +visilizumab,388.7974972967481,442.938845119412,355.4784253492768,1213.247407984613,-48.93999999999946, +xentuzumab,542.012595059095,93.06433997120824,384.6837667981226,1287.0375503952228,-45.46999999999976, +zalutumumab,574.948432155201,108.11179654095162,281.1150066886626,849.6622409337458,-53.13999999999941, +zanolimumab,272.47962240570075,311.5341490923786,163.91006884296516,900.2750054960849,-51.18499999999941, +zolbetuximab,294.9748073623924,266.1339388335393,174.34878765803845,1070.484307199017,-50.60499999999945, +P907-A14-arid-pond-618a6,307.24902180865087,279.8973882493217,136.95947370270986,535.7783763563056,-50.12499999999941, +P907-A14-asphalt-resin-c0dd5,447.9652363447694,51.33551020063304,252.3652884393347,630.4501328235808,-57.279999999999184, +P907-A14-associative-shrike-139f0,299.953103512209,366.8047484421058,93.45098455847013,1046.808490710095,-43.97999999999961, +P907-A14-average-limiter-a125e,556.66225743456,154.35217435337174,283.6599134388433,700.297561358149,-55.04999999999933, +P907-A14-broad-vertex-224ba,332.2558061654478,97.22510977314889,174.59506773308988,641.2671288652296,-57.144999999999, +P907-A14-celeste-render-c7237,487.2485378183489,82.94029101172399,195.9324117312044,625.3151963727665,-67.54499999999898, +P907-A14-citric-margarine-1e21c,300.85694198982776,168.07227251562796,106.91838371451612,963.3025563450526,-51.94999999999919, +P907-A14-clever-sub-84f5e,407.7107522608881,21.872949112101995,157.60076539510598,831.9769261332631,-60.37499999999911, +P907-A14-compact-ginger-fdb61,551.8890208575239,75.48924711984563,364.9466118360209,734.7853271444923,-59.08499999999928, +P907-A14-concave-pinot-66fc0,478.5237439309624,110.18700928401744,216.3849541240153,1207.3673847318923,-49.96499999999951, +P907-A14-coped-modulation-43c25,321.42487543333584,278.3593052554968,275.3523384905367,752.7940095827498,-53.69499999999949, +P907-A14-crazy-bifocal-7c4f1,455.8034070261755,114.20896893546936,303.5101891827173,655.4928894662729,-59.16499999999927, +P907-A14-dark-nucleus-4b90e,290.5876019362808,119.36062010814376,136.34309507631602,649.9577079828045,-49.74499999999942, +P907-A14-decidable-application-a0de6,485.2561730275389,308.5147122259245,245.4856197665615,691.6783353123152,-44.55499999999964, +P907-A14-descriptive-cap-ed267,534.9262957340653,102.02890391724678,314.6563493595992,562.5139047916804,-43.7149999999997, +P907-A14-desert-purlin-53451,407.3667839337159,142.35674762399094,93.94629260747298,1171.3062491103854,-54.93999999999924, +P907-A14-dynamic-home-0575d,415.831219671384,56.141542940747634,336.5864231495839,958.3676003981544,-43.70499999999962, +P907-A14-ecru-combat-e2619,306.440729812971,127.64445030055516,284.1938910035648,848.8455582985661,-52.54499999999947, +P907-A14-ecru-deque-ba8c9,547.2087376484592,369.07890924897686,288.49861571369223,1083.2798111081588,-46.76999999999941, +P907-A14-faint-click-67ee5,107.85110423206798,69.22022192888701,211.16477385943767,928.6206177648082,-49.869999999999344, +P907-A14-fast-poset-8ec15,439.4949438514476,135.5552982306759,82.23956109869665,902.9260854402216,-56.34499999999933, +P907-A14-fermented-cathedral-185ee,190.418101676762,60.54093044057248,272.4318324594191,843.3670452394342,-57.98499999999909, +P907-A14-finite-pixel-1f5d2,429.2387383350752,272.54098212120203,176.71186887296065,633.2360210262814,-49.75999999999949, +P907-A14-frayed-particle-5e881,297.3896767019044,0.0,407.2854405636732,673.2507269271237,-69.80999999999912, +P907-A14-generous-property-c943a,237.9043271868587,303.4345184112452,175.1276735918563,713.682188610234,-56.77999999999918, +P907-A14-gentle-valid-12932,557.3556157658086,101.8948432625288,130.18151035811496,859.4194663099651,-57.204999999999245, +P907-A14-humongous-throw-52925,804.7713435968124,242.8763887519006,370.2920551214216,865.5036194519365,-57.34499999999942, +P907-A14-icy-butter-8afa4,245.8051530715463,380.0153612523502,403.24535738787614,620.2211014090893,-47.1199999999995, +P907-A14-immense-cone-377a5,339.73541647681145,133.84019218398817,298.75222727054995,612.6212077674004,-51.52999999999944, +P907-A14-inscribed-type-583c0,385.8031419824392,214.41399900481449,129.04253276196263,1159.778775408115,-57.4699999999993, +P907-A14-iron-time-7d5d8,411.8000102947223,90.25051333878336,193.7153076616368,797.131014943648,-49.70499999999935, +P907-A14-khaki-cadet-37ddd,529.8642445255285,140.61903156620767,349.71002950852323,869.6523609900787,-60.66499999999916, +P907-A14-khaki-goal-7976c,442.4102179034136,201.6547226940859,475.9926371121453,784.4962936220695,-61.54999999999937, +P907-A14-late-coffee-b8f3d,327.2158685492252,84.30237632762736,104.6275827806308,718.514215551639,-51.56499999999932, +P907-A14-linear-hadron-ab9f7,524.4669423310974,72.62446552308899,310.61678772199406,488.99235441482256,-49.60499999999957, +P907-A14-massive-bocaccio-47a3c,413.8286508993382,146.14633092764768,261.4963128988958,697.456573209681,-59.53999999999909, +P907-A14-meek-buck-dae99,545.0297226016336,212.43085987531896,301.09151648605456,920.3978515056308,-53.15499999999935, +P907-A14-messy-right-8c58c,463.5056289376885,110.18910705098858,285.3232467354852,834.2071493889549,-59.35999999999922, +P907-A14-metallic-liquidation-6b34d,396.87663869674464,73.96317123157978,240.5123443171476,971.0864841122578,-61.17999999999925, +P907-A14-metallic-pole-64d63,313.931559050287,179.98576529798413,447.966218537892,606.2779608043303,-57.18499999999929, +P907-A14-mild-chick-b8732,572.6092077412263,106.843565273681,125.47652749839769,1280.4085278737768,-55.39999999999919, +P907-A14-mild-cider-93b9a,446.1199360394513,258.03763514232287,215.2167291576316,909.7043379070992,-58.51999999999919, +P907-A14-mild-territory-6277f,382.1999534393202,42.39995951675117,133.47069134931607,1260.219390460534,-61.11499999999913, +P907-A14-miniature-hill-eff2e,503.7085029490978,88.75875750142555,304.3840780727533,1231.1824974308893,-53.13499999999951, +P907-A14-minty-mercury-75369,690.4587667570612,261.1463493938402,307.5457898344678,1010.014468102102,-61.004999999999086, +P907-A14-national-dataset-d6941,314.88816953507023,233.1796009388952,354.81285423264296,541.0080547882657,-60.91499999999933, +P907-A14-navy-channel-87ace,474.1463473347381,99.55478929937424,261.6412396454783,884.0711706187226,-52.48999999999935, +P907-A14-nearest-interference-9055c,201.44047474878923,172.06750522795406,305.4809108373888,819.9909937953335,-47.544999999999625, +P907-A14-obvious-character-128dd,268.3992747732341,151.9120756302444,77.72129583898396,546.8611482035221,-53.534999999999485, +P907-A14-plain-trombone-db73c,418.8490032106242,232.32608974768755,112.51093514911648,629.9243865206628,-53.18499999999949, +P907-A14-pointed-bud-b2840,335.6215648365871,213.60061536667425,223.62917242565365,586.8847752337148,-52.63999999999938, +P907-A14-random-borzoi-de6fb,528.4151013141807,411.3684773460735,211.5303077354999,850.7494492760844,-45.75999999999942, +P907-A14-rectilinear-layout-04495,568.8432960616327,81.60324595671443,78.04346392386634,885.2189624408365,-51.03999999999951, +P907-A14-reduced-withdrawal-f4e86,502.2824167725816,48.24316098388135,194.42221576839484,730.0352605291514,-56.409999999999535, +P907-A14-regional-tray-5f973,578.8747729554303,123.16979856263848,305.5217345359447,636.4549232721928,-55.20499999999953, +P907-A14-rigid-product-5d155,350.7033346553606,369.19908313759976,231.29000261513508,900.6223399377376,-58.26999999999919, +P907-A14-rowdy-restaurant-852e1,298.5009045049692,155.21985596835475,15.36209205230538,873.0422711355124,-48.67999999999938, +P907-A14-rubbery-disk-fc338,280.7030920118137,107.07092793759544,234.5258060797993,434.9827646438919,-48.44499999999961, +P907-A14-salty-developer-1a97c,296.8871088651695,71.82946140995533,252.924135072742,710.5028907568479,-56.76999999999948, +P907-A14-salty-flunky-7a230,566.0026394624651,328.77187075170525,446.7536099721453,819.7798885924163,-47.4149999999996, +P907-A14-salty-sledder-a9417,651.5548333008653,361.0568668937492,290.98921697309186,1142.7130484460097,-38.44499999999992, +P907-A14-selfish-bungalow-dd3f4,330.76738722944094,210.4497649489928,56.16385056260651,1012.5721766850048,-50.774999999999416, +P907-A14-sharp-quanta-4ca51,286.1620837147055,167.93665880358765,289.24743235245626,871.435843971992,-47.12999999999945, +P907-A14-shrewd-data-9aba8,199.26862626784407,648.4837886657543,326.2243160371736,667.6940382863606,-44.884999999999565, +P907-A14-skinny-tab-c6558,435.9709329811154,165.60404071076937,505.09548777305145,1057.5403540858742,-51.394999999999406, +P907-A14-speedy-bandwidth-545ec,234.6337775971229,326.1423233287688,339.4296518700753,849.1303653680271,-45.07999999999968, +P907-A14-stone-latency-99dcd,382.9203101427693,127.1959320683655,111.9792577156052,837.5305361854543,-51.54999999999947, +P907-A14-straight-omelette-3de59,285.8900340166693,149.69906575631927,388.8975574439298,836.4571853478808,-52.00499999999942, +P907-A14-succulent-raisin-910a8,425.9879777483653,758.9610462974509,308.6486707168801,765.6633225860922,-36.43499999999991, +P907-A14-swarm-arpeggio-73992,254.3092062417859,480.00207561033983,274.0134519109556,653.557211577098,-47.97999999999955, +P907-A14-syrupy-pentatonic-39802,366.515407590274,209.7943421089432,207.25839792308463,417.880597456374,-46.17999999999973, +P907-A14-taxonomic-peninsula-32674,407.8954977649445,78.20126865543823,322.828126077632,1007.0181409480924,-50.67999999999946, +P907-A14-timid-gang-841a7,596.9493704136786,193.0623819174062,119.07740872028978,1208.678559130936,-43.35999999999986, +P907-A14-tiny-cover-b07ec,144.7264241405038,265.0628423818947,291.3923270091802,797.698166033669,-50.90499999999947, +P907-A14-trite-leaf-1fefb,366.3917089406677,37.803708648970016,259.2618781221092,985.002669459727,-49.87999999999956, +P907-A14-unary-estuary-9ae8d,553.0473555656806,594.8577534373045,293.3821283829673,1362.453592988673,-47.35999999999966, +P907-A14-undirected-hull-8daff,289.60587949888003,276.0883857576104,202.3825910333217,940.476431629252,-43.68999999999963, +P907-A14-vain-bucket-0f231,393.7408002853176,432.7949798164591,262.1506759286193,1042.3676397388974,-51.62999999999936, +P907-A14-wintry-couple-24188,228.9054883530314,254.46489997315405,176.07109937962866,558.7798517784424,-51.04499999999922, +P907-A14-witty-fugue-86932,384.9641563830086,93.18565795814784,288.6861379610453,852.7447464589561,-57.819999999999446, diff --git a/models/propermab_linear/src/propermab_linear/model.py b/models/propermab_linear/src/propermab_linear/model.py new file mode 100644 index 0000000..e6fd23d --- /dev/null +++ b/models/propermab_linear/src/propermab_linear/model.py @@ -0,0 +1,119 @@ +from pathlib import Path +import pickle +import pandas as pd +import numpy as np +from sklearn.linear_model import Ridge +from sklearn.model_selection import KFold +from scipy.stats import spearmanr + +from abdev_core import BaseModel, PROPERTY_LIST + +# top 5 propermab features +FEATURE_NAMES = ["hyd_patch_area_cdr", "pos_patch_area", "dipole_moment", + "aromatic_asa", "exposed_net_charge"] + +# all propermab features +FEATURE_CSV_PATH = "feature_store_top5.csv" + + +class TapLinearModel(BaseModel): + + def train(self, df: pd.DataFrame, run_dir: Path, *, seed: int = 42) -> None: + """ + Train Ridge models and compute 5-fold CV Spearman correlation. + Saves: + models.pkl – trained full models + cv_spearman.csv – average Spearman ρ per property + """ + run_dir.mkdir(parents=True, exist_ok=True) + + # propermab features + feature_df = pd.read_csv(FEATURE_CSV_PATH) + + # merge features into training df + df_merged = df.merge(feature_df, on="antibody_name", how="left") + + cv_results = [] + models = {} + + for property_name in PROPERTY_LIST: + + mask = df_merged[property_name].notna() + df_prop = df_merged[mask] + + if len(df_prop) == 0: + print(f"Warning: no data for {property_name}") + continue + + X = df_prop[FEATURE_NAMES].values + y = df_prop[property_name].values + + # ----- 5-fold cross-validation ----- + kf = KFold(n_splits=5, shuffle=True, random_state=seed) + spearman_scores = [] + + for train_idx, val_idx in kf.split(X): + X_train, X_val = X[train_idx], X[val_idx] + y_train, y_val = y[train_idx], y[val_idx] + + model = Ridge() + model.fit(X_train, y_train) + + preds = model.predict(X_val) + rho, _ = spearmanr(y_val, preds, nan_policy='omit') + spearman_scores.append(rho) + + avg_rho = np.nanmean(spearman_scores) + + cv_results.append({ + "property": property_name, + "spearman_rho": avg_rho + }) + + print(f"{property_name}: CV Spearman ρ = {avg_rho:.4f}") + + # train final model on all available data + final_model = Ridge() + final_model.fit(X, y) + models[property_name] = final_model + + # save trained models + models_path = run_dir / "models.pkl" + with open(models_path, "wb") as f: + pickle.dump(models, f) + print(f"Saved models to {models_path}") + + # save CV Spearman results + df_cv = pd.DataFrame(cv_results) + cv_path = run_dir / "cv_spearman.csv" + df_cv.to_csv(cv_path, index=False) + print(f"Saved CV Spearman results to {cv_path}") + + + def predict(self, df: pd.DataFrame, run_dir: Path) -> pd.DataFrame: + """Generate predictions for all provided samples using trained models.""" + models_path = run_dir / "models.pkl" + if not models_path.exists(): + raise FileNotFoundError(f"Models not found: {models_path}") + + with open(models_path, "rb") as f: + models = pickle.load(f) + + # merge features into prediction df + feature_df = pd.read_csv(FEATURE_CSV_PATH) + df_merged = df.merge(feature_df, on="antibody_name", how="left") + + # generate predictions + for property_name, model in models.items(): + X = df_merged[FEATURE_NAMES].values + df_merged[property_name] = model.predict(X) + + # output columns + output_cols = ["antibody_name", "vh_protein_sequence", "vl_protein_sequence"] + output_cols.extend([prop for prop in PROPERTY_LIST if prop in models]) + df_output = df_merged[output_cols] + + print(f"Generated predictions for {len(df_output)} samples") + print(f" Properties: {', '.join(models.keys())}") + + return df_output diff --git a/models/propermab_linear/src/propermab_linear/run.py b/models/propermab_linear/src/propermab_linear/run.py new file mode 100644 index 0000000..b869e30 --- /dev/null +++ b/models/propermab_linear/src/propermab_linear/run.py @@ -0,0 +1,12 @@ +"""CLI interface for propermab Linear baseline.""" + +from abdev_core import create_cli_app +from .model import TapLinearModel + + +app = create_cli_app(TapLinearModel, "TAP Linear") + + +if __name__ == "__main__": + app() +