Comparing Modlyn & Scanpy feature selection methods
¶
!pip install 'modlyn[dev]'
!lamin init --storage test-modlyn
Show code cell output
Requirement already satisfied: modlyn[dev] in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (0.0.7)
Requirement already satisfied: anndata>=0.12.0rc1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (0.12.10)
Requirement already satisfied: scikit-learn in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (1.9.0)
Requirement already satisfied: matplotlib in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (3.11.1)
Requirement already satisfied: lightning in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (2.6.5)
Requirement already satisfied: lamindb[jupyter] in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (2.8.1)
Requirement already satisfied: seaborn in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (0.13.2)
Requirement already satisfied: scanpy>=1.10 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (1.12.2)
Requirement already satisfied: pre-commit in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (4.6.1)
Requirement already satisfied: nox in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (2025.2.9)
Requirement already satisfied: pytest>=6.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (9.1.1)
Requirement already satisfied: pytest-cov in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (7.1.0)
Requirement already satisfied: nbproject_test in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from modlyn[dev]) (0.6.0)
Requirement already satisfied: array-api-compat>=1.7.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (1.15.0)
Requirement already satisfied: h5py>=3.8 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (3.16.0)
Requirement already satisfied: legacy-api-wrap in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (1.5)
Requirement already satisfied: natsort in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (8.4.0)
Requirement already satisfied: numpy>=1.26 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (2.4.6)
Requirement already satisfied: packaging>=24.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (26.2)
Requirement already satisfied: pandas!=2.1.2,<3,>=2.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (2.3.3)
Requirement already satisfied: scipy!=1.17.0,>=1.12 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (1.16.3)
Requirement already satisfied: zarr!=3.0.*,>=2.18.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from anndata>=0.12.0rc1->modlyn[dev]) (3.2.1)
Requirement already satisfied: python-dateutil>=2.8.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pandas!=2.1.2,<3,>=2.1.0->anndata>=0.12.0rc1->modlyn[dev]) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pandas!=2.1.2,<3,>=2.1.0->anndata>=0.12.0rc1->modlyn[dev]) (2026.2)
Requirement already satisfied: tzdata>=2022.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pandas!=2.1.2,<3,>=2.1.0->anndata>=0.12.0rc1->modlyn[dev]) (2026.3)
Requirement already satisfied: iniconfig>=1.0.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pytest>=6.0->modlyn[dev]) (2.3.0)
Requirement already satisfied: pluggy<2,>=1.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pytest>=6.0->modlyn[dev]) (1.6.0)
Requirement already satisfied: pygments>=2.7.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pytest>=6.0->modlyn[dev]) (2.20.0)
Requirement already satisfied: six>=1.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas!=2.1.2,<3,>=2.1.0->anndata>=0.12.0rc1->modlyn[dev]) (1.17.0)
Requirement already satisfied: certifi in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (2026.7.22)
Requirement already satisfied: fast-array-utils>=1.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from fast-array-utils[accel,sparse]>=1.4->scanpy>=1.10->modlyn[dev]) (1.5)
Requirement already satisfied: joblib in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (1.5.3)
Requirement already satisfied: networkx>=2.8.8 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (3.6.1)
Requirement already satisfied: numba>=0.60 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.66.0)
Requirement already satisfied: patsy in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (1.0.2)
Requirement already satisfied: pynndescent>=0.5.13 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.6.0)
Requirement already satisfied: scverse-misc>=0.0.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.1.3)
Requirement already satisfied: session-info2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.4.1)
Requirement already satisfied: statsmodels>=0.14.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.14.6)
Requirement already satisfied: tqdm in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (4.69.0)
Requirement already satisfied: typing-extensions in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (4.16.0)
Requirement already satisfied: umap-learn>=0.5.12 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scanpy>=1.10->modlyn[dev]) (0.5.12)
Requirement already satisfied: contourpy>=1.0.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (0.12.1)
Requirement already satisfied: fonttools>=4.28.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (4.63.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (1.5.0)
Requirement already satisfied: pillow>=9 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (12.3.0)
Requirement already satisfied: pyparsing>=3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from matplotlib->modlyn[dev]) (3.3.2)
Requirement already satisfied: llvmlite<0.49,>=0.48.0dev0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from numba>=0.60->scanpy>=1.10->modlyn[dev]) (0.48.0)
Requirement already satisfied: narwhals>=2.0.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scikit-learn->modlyn[dev]) (2.24.0)
Requirement already satisfied: threadpoolctl>=3.5.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from scikit-learn->modlyn[dev]) (3.6.0)
Requirement already satisfied: donfig>=0.8 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from zarr!=3.0.*,>=2.18.7->anndata>=0.12.0rc1->modlyn[dev]) (0.8.1.post1)
Requirement already satisfied: google-crc32c>=1.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from zarr!=3.0.*,>=2.18.7->anndata>=0.12.0rc1->modlyn[dev]) (1.8.0)
Requirement already satisfied: numcodecs>=0.14 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from zarr!=3.0.*,>=2.18.7->anndata>=0.12.0rc1->modlyn[dev]) (0.16.5)
Requirement already satisfied: pyyaml in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from donfig>=0.8->zarr!=3.0.*,>=2.18.7->anndata>=0.12.0rc1->modlyn[dev]) (6.0.3)
WARNING: lamindb 2.8.1 does not provide the extra 'jupyter'
Requirement already satisfied: lamindb-core==2.8.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.8.1)
Requirement already satisfied: lamin_utils==0.16.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.16.4)
Requirement already satisfied: lamin_cli==1.19.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.19.1)
Requirement already satisfied: lamindb_setup==1.25.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.25.5)
Requirement already satisfied: psycopg2-binary in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.9.12)
Requirement already satisfied: rich-click>=1.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamin_cli==1.19.1->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.9.8)
Requirement already satisfied: bionty<3,>=2.3.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.4.2)
Requirement already satisfied: pertdb<3,>=2.2.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.2.0)
Requirement already satisfied: jupytext in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.19.5)
Requirement already satisfied: nbconvert>=7.2.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (7.17.1)
Requirement already satisfied: nbproject==0.11.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.11.1)
Requirement already satisfied: pyarrow in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (25.0.0)
Requirement already satisfied: pandera>=0.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.32.1)
Requirement already satisfied: graphviz in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.21)
Requirement already satisfied: python-dotenv in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.2.2)
Requirement already satisfied: django<5.3,>=5.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (5.2.16)
Requirement already satisfied: dj_database_url<3.0.0,>=1.3.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.3.0)
Requirement already satisfied: django-pgtrigger in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.17.0)
Requirement already satisfied: pydantic-settings in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.14.2)
Requirement already satisfied: platformdirs<5.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.11.0)
Requirement already satisfied: httpx_retries<1.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.6.0)
Requirement already satisfied: requests in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.34.2)
Requirement already satisfied: universal_pathlib==0.3.10 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.3.10)
Requirement already satisfied: botocore<2.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.43.46)
Requirement already satisfied: supabase<=2.24.0,>=2.20.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: websockets>=13.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (15.0.1)
Requirement already satisfied: pyjwt<3.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.13.0)
Requirement already satisfied: psutil in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (7.2.2)
Requirement already satisfied: aiobotocore<4.0.0,>=2.12.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.8.0)
Requirement already satisfied: s3fs!=2024.10.0,<=2026.1.0,>=2023.12.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2026.1.0)
Requirement already satisfied: boto3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.43.46)
Requirement already satisfied: pydantic>=2.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.13.4)
Requirement already satisfied: orjson in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.11.9)
Requirement already satisfied: importlib-metadata in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (9.0.0)
Requirement already satisfied: fsspec>=2024.5.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from universal_pathlib==0.3.10->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2026.1.0)
Requirement already satisfied: pathlib-abc<0.6.0,>=0.5.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from universal_pathlib==0.3.10->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.5.2)
Requirement already satisfied: aiohttp<4.0.0,>=3.12.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.14.3)
Requirement already satisfied: aioitertools<1.0.0,>=0.5.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.13.0)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.1.0)
Requirement already satisfied: multidict<7.0.0,>=6.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (6.7.1)
Requirement already satisfied: wrapt<3.0.0,>=1.10.10 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.2.2)
WARNING: aiobotocore 3.8.0 does not provide the extra 'boto3'
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.7.1)
Requirement already satisfied: aiosignal>=1.4.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.4.0)
Requirement already satisfied: attrs>=17.3.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (26.1.0)
Requirement already satisfied: frozenlist>=1.1.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.8.0)
Requirement already satisfied: propcache>=0.2.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.5.2)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.12.0->aiobotocore<4.0.0,>=2.12.4->aiobotocore[boto3]<4.0.0,>=2.12.4; extra == "aws"->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.24.5)
Requirement already satisfied: urllib3!=2.2.0,<3,>=1.25.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from botocore<2.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.7.0)
Requirement already satisfied: asgiref>=3.8.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from django<5.3,>=5.2->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.12.1)
Requirement already satisfied: sqlparse>=0.3.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from django<5.3,>=5.2->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.5.5)
Requirement already satisfied: httpx>=0.20.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpx_retries<1.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.28.1)
Requirement already satisfied: realtime==2.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: supabase-functions==2.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: storage3==2.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: supabase-auth==2.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: postgrest==2.24.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.24.0)
Requirement already satisfied: deprecation>=2.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from postgrest==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.1.0)
Requirement already satisfied: strenum>=0.4.15 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from supabase-functions==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.4.15)
Requirement already satisfied: anyio in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpx>=0.20.0->httpx_retries<1.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.14.2)
Requirement already satisfied: httpcore==1.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpx>=0.20.0->httpx_retries<1.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.0.9)
Requirement already satisfied: idna in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpx>=0.20.0->httpx_retries<1.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.18)
Requirement already satisfied: h11>=0.16 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.20.0->httpx_retries<1.0.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.16.0)
Requirement already satisfied: h2<5,>=3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from httpx[http2]<0.29,>=0.26->postgrest==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.3.0)
Requirement already satisfied: hyperframe<7,>=6.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from h2<5,>=3->httpx[http2]<0.29,>=0.26->postgrest==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (6.1.0)
Requirement already satisfied: hpack<5,>=4.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from h2<5,>=3->httpx[http2]<0.29,>=0.26->postgrest==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.2.0)
Requirement already satisfied: annotated-types>=0.6.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pydantic>=2.0.0->nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.7.0)
Requirement already satisfied: pydantic-core==2.46.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pydantic>=2.0.0->nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.46.4)
Requirement already satisfied: typing-inspection>=0.4.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pydantic>=2.0.0->nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.4.2)
Requirement already satisfied: beautifulsoup4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.15.0)
Requirement already satisfied: bleach!=5.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from bleach[css]!=5.0.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (6.4.0)
Requirement already satisfied: defusedxml in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.7.1)
Requirement already satisfied: jinja2>=3.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.1.6)
Requirement already satisfied: jupyter-core>=4.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (5.9.1)
Requirement already satisfied: jupyterlab-pygments in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.3.0)
Requirement already satisfied: markupsafe>=2.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.0.3)
Requirement already satisfied: mistune<4,>=2.0.3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.3.4)
Requirement already satisfied: nbclient>=0.5.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.11.0)
Requirement already satisfied: nbformat>=5.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (5.10.4)
Requirement already satisfied: pandocfilters>=1.4.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.5.1)
Requirement already satisfied: traitlets>=5.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (5.15.1)
Requirement already satisfied: webencodings in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.5.1)
Requirement already satisfied: tinycss2>=1.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from bleach[css]!=5.0.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.5.1)
Requirement already satisfied: jupyter-client>=7.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbclient>=0.5.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (8.9.1)
Requirement already satisfied: pyzmq>=25.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jupyter-client>=7.0.0->nbclient>=0.5.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (27.1.0)
Requirement already satisfied: tornado>=6.4.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jupyter-client>=7.0.0->nbclient>=0.5.0->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (6.5.7)
Requirement already satisfied: fastjsonschema>=2.15 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbformat>=5.7->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.21.2)
Requirement already satisfied: jsonschema>=2.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbformat>=5.7->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.26.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jsonschema>=2.6->nbformat>=5.7->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2025.9.1)
Requirement already satisfied: referencing>=0.28.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jsonschema>=2.6->nbformat>=5.7->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.37.0)
Requirement already satisfied: rpds-py>=0.25.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jsonschema>=2.6->nbformat>=5.7->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2026.6.3)
Requirement already satisfied: typeguard in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pandera>=0.24.0->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.5.2)
Requirement already satisfied: typing_inspect>=0.6.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pandera>=0.24.0->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.9.0)
Requirement already satisfied: cryptography>=3.4.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pyjwt[crypto]>=2.10.1->supabase-auth==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (49.0.0)
Requirement already satisfied: cffi>=2.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cryptography>=3.4.0->pyjwt[crypto]>=2.10.1->supabase-auth==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.1.0)
Requirement already satisfied: pycparser in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cffi>=2.0.0->cryptography>=3.4.0->pyjwt[crypto]>=2.10.1->supabase-auth==2.24.0->supabase<=2.24.0,>=2.20.0->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.0)
Requirement already satisfied: click>=8 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from rich-click>=1.7->lamin_cli==1.19.1->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (8.4.2)
Requirement already satisfied: rich>=12 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from rich-click>=1.7->lamin_cli==1.19.1->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (15.0.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from rich>=12->rich-click>=1.7->lamin_cli==1.19.1->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.2.0)
Requirement already satisfied: mdurl~=0.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from markdown-it-py>=2.2.0->rich>=12->rich-click>=1.7->lamin_cli==1.19.1->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.1.2)
Requirement already satisfied: mypy-extensions>=0.3.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from typing_inspect>=0.6.0->pandera>=0.24.0->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (1.1.0)
Requirement already satisfied: soupsieve>=1.6.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from beautifulsoup4->nbconvert>=7.2.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (2.9.1)
Requirement already satisfied: s3transfer<0.20.0,>=0.19.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from boto3->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.19.2)
Requirement already satisfied: zipp>=3.20 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from importlib-metadata->nbproject==0.11.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (4.1.0)
Requirement already satisfied: mdit-py-plugins in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jupytext->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (0.6.1)
Requirement already satisfied: lightning-utilities<2.0,>=0.10.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lightning->modlyn[dev]) (0.15.3)
Requirement already satisfied: torch<4.0,>=2.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lightning->modlyn[dev]) (2.13.0)
Requirement already satisfied: torchmetrics<3.0,>0.7.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lightning->modlyn[dev]) (1.9.0)
Requirement already satisfied: pytorch-lightning in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from lightning->modlyn[dev]) (2.6.5)
Requirement already satisfied: filelock in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (3.32.0)
Requirement already satisfied: setuptools>=77.0.3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (83.0.0)
Requirement already satisfied: sympy>=1.13.3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (1.14.0)
Requirement already satisfied: cuda-toolkit==13.0.3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.0.3.0)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.3.1)
Requirement already satisfied: nvidia-cudnn-cu13==9.20.0.48 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (9.20.0.48)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (0.8.1)
Requirement already satisfied: nvidia-nccl-cu13==2.29.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (2.29.7)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (3.4.5)
Requirement already satisfied: triton==3.7.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from torch<4.0,>=2.1.0->lightning->modlyn[dev]) (3.7.1)
Requirement already satisfied: nvidia-cublas==13.1.1.3.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.1.1.3)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.0.88)
Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (12.0.0.61)
Requirement already satisfied: nvidia-nvjitlink<14,>=13.0.88 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.3.33)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (12.6.3.3)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (13.0.85)
Requirement already satisfied: cuda-pathfinder>=1.4.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from cuda-bindings<14,>=13.0.3->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (1.6.0)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from sympy>=1.13.3->torch<4.0,>=2.1.0->lightning->modlyn[dev]) (1.3.0)
Requirement already satisfied: ipykernel in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nbproject_test->modlyn[dev]) (7.3.0)
Requirement already satisfied: comm>=0.1.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipykernel->nbproject_test->modlyn[dev]) (0.2.3)
Requirement already satisfied: debugpy>=1.6.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipykernel->nbproject_test->modlyn[dev]) (1.8.21)
Requirement already satisfied: ipython>=7.23.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipykernel->nbproject_test->modlyn[dev]) (9.15.0)
Requirement already satisfied: matplotlib-inline>=0.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipykernel->nbproject_test->modlyn[dev]) (0.2.2)
Requirement already satisfied: nest-asyncio2>=1.7.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipykernel->nbproject_test->modlyn[dev]) (1.7.2)
Requirement already satisfied: decorator>=5.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (5.3.1)
Requirement already satisfied: ipython-pygments-lexers>=1.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (1.1.1)
Requirement already satisfied: jedi>=0.18.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.20.0)
Requirement already satisfied: pexpect>4.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (4.9.0)
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (3.0.52)
Requirement already satisfied: stack_data>=0.6.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.6.3)
Requirement already satisfied: wcwidth in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.8.2)
Requirement already satisfied: parso<0.9.0,>=0.8.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from jedi>=0.18.2->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.8.7)
Requirement already satisfied: ptyprocess>=0.5 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pexpect>4.6->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.7.0)
Requirement already satisfied: executing>=1.2.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (2.2.1)
Requirement already satisfied: asttokens>=2.1.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (3.0.2)
Requirement already satisfied: pure-eval in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->nbproject_test->modlyn[dev]) (0.2.3)
Requirement already satisfied: argcomplete<4,>=1.9.4 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nox->modlyn[dev]) (3.7.0)
Requirement already satisfied: colorlog<7,>=2.6.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nox->modlyn[dev]) (6.11.0)
Requirement already satisfied: dependency-groups>=1.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nox->modlyn[dev]) (1.3.1)
Requirement already satisfied: virtualenv>=20.14.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from nox->modlyn[dev]) (21.7.0)
Requirement already satisfied: distlib<1,>=0.3.7 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from virtualenv>=20.14.1->nox->modlyn[dev]) (0.4.3)
Requirement already satisfied: python-discovery>=1.4.2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from virtualenv>=20.14.1->nox->modlyn[dev]) (1.5.0)
Requirement already satisfied: cfgv>=2.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pre-commit->modlyn[dev]) (3.5.0)
Requirement already satisfied: identify>=1.0.0 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pre-commit->modlyn[dev]) (2.6.19)
Requirement already satisfied: nodeenv>=0.11.1 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from pre-commit->modlyn[dev]) (1.10.0)
Requirement already satisfied: coverage>=7.10.6 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from coverage[toml]>=7.10.6->pytest-cov->modlyn[dev]) (7.15.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages (from requests->lamindb_setup==1.25.5->lamindb_setup[aws]==1.25.5->lamindb-core==2.8.1->lamindb-core[full]==2.8.1->lamindb[jupyter]; extra == "dev"->modlyn[dev]) (3.4.9)
→ initialized lamindb: anonymous/test-modlyn
import lamindb as ln
import modlyn as mn
import scanpy as sc
import pandas as pd
import seaborn as sns
sns.set_theme()
%config InlineBackend.figure_formats = ['svg']
Show code cell output
→ connected lamindb: anonymous/test-modlyn
ln.track()
Show code cell output
→ created Transform('cMfGmSHmiInu0000', key='quickstart.ipynb'), started new Run('mmhhkAv83GkVZtqc') at 2026-07-23 11:05:33 UTC
→ notebook imports: lamindb-core==2.8.1 modlyn==0.0.7 pandas==2.3.3 scanpy==1.12.2 seaborn==0.13.2
• tip: to identify the notebook across renames, pass the uid: ln.track("cMfGmSHmiInu")
Prepare dataset¶
artifact = ln.Artifact.using("laminlabs/arrayloader-benchmarks").get(
"JNaxQe8zbljesdbK0000"
)
adata = artifact.load()
sc.pp.log1p(adata)
adata
Show code cell output
/tmp/ipykernel_3396/2273553885.py:1: DeprecationWarning: Use connect instead of using, using will be removed in the future.
artifact = ln.Artifact.using("laminlabs/arrayloader-benchmarks").get(
→ transferred: Artifact(uid='JNaxQe8zbljesdbK0000'), Storage(uid='LCfy7WeXbvKN')
AnnData object with n_obs × n_vars = 1000 × 100
obs: 'sample', 'gene_count', 'tscp_count', 'mread_count', 'drugname_drugconc', 'drug', 'cell_line', 'sublibrary', 'BARCODE', 'pcnt_mito', 'S_score', 'G2M_score', 'phase', 'pass_filter', 'cell_name', 'plate'
uns: 'log1p'
keep = adata.obs["cell_line"].value_counts().loc[lambda x: x > 3].index
adata = adata[adata.obs["cell_line"].isin(keep)].copy()
adata
Show code cell output
AnnData object with n_obs × n_vars = 992 × 100
obs: 'sample', 'gene_count', 'tscp_count', 'mread_count', 'drugname_drugconc', 'drug', 'cell_line', 'sublibrary', 'BARCODE', 'pcnt_mito', 'S_score', 'G2M_score', 'phase', 'pass_filter', 'cell_name', 'plate'
uns: 'log1p'
adata.obs["cell_line"].value_counts().tail()
Show code cell output
cell_line
CVCL_0099 8
CVCL_1693 8
CVCL_1239 8
CVCL_0028 4
CVCL_1125 4
Name: count, dtype: int64
Train LogReg with Modlyn¶
logreg = mn.models.SimpleLogReg(
adata=adata,
label_column="cell_line",
learning_rate=1e-1,
weight_decay=1e-3,
)
logreg.fit(
adata_train=adata,
adata_val=adata[:20],
train_dataloader_kwargs={"batch_size": 128, "drop_last": True, "num_workers": 4},
max_epochs=5,
)
Show code cell output
GPU available: False, used: False
TPU available: False, using: 0 TPU cores
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/logger_connector/logger_connector.py:76: Starting from v1.9.0, `tensorboardX` has been removed as a dependency of the `lightning.pytorch` package, due to potential conflicts with other packages in the ML ecosystem. For this reason, `logger=True` will use `CSVLogger` as the default logger, unless the `tensorboard` or `tensorboardX` packages are found. Please `pip install lightning[extra]` or one of them to enable TensorBoard support by default
💡 Tip: For seamless cloud logging and experiment tracking, try installing [litlogger](https://pypi.org/project/litlogger/) to enable LitLogger, which logs metrics and artifacts automatically to the Lightning Experiments platform.
💡 Tip: For seamless cloud uploads and versioning, try installing [litmodels](https://pypi.org/project/litmodels/) to enable LitModelCheckpoint, which syncs automatically with the Lightning model registry.
┏━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┳━━━━━━━┓ ┃ ┃ Name ┃ Type ┃ Params ┃ Mode ┃ FLOPs ┃ ┡━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━╇━━━━━━━┩ │ 0 │ linear │ Linear │ 4.5 K │ train │ 0 │ │ 1 │ train_metrics │ MetricCollection │ 0 │ train │ 0 │ │ 2 │ val_metrics │ MetricCollection │ 0 │ train │ 0 │ └───┴───────────────┴──────────────────┴────────┴───────┴───────┘
Trainable params: 4.5 K Non-trainable params: 0 Total params: 4.5 K Total estimated model params size (MB): 0.018 Modules in train mode: 7 Modules in eval mode: 0 Total FLOPs: 0
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/lightning/pytorch/utilities/_pytree.py:21: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/rich/live.py:260: UserWarning: install
"ipywidgets" for Jupyter support
warnings.warn('install "ipywidgets" for Jupyter support')
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/lightning/pytorch/utilities/_pytree.py:21: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:434: The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=3` in the `DataLoader` to improve performance.
`Trainer.fit` stopped: `max_epochs=5` reached.
logreg.plot_losses()
Show code cell output
Final training loss: 3.2961
Final validation loss: 4.2149
logreg.plot_classification_report(adata)
Show code cell output
Weighted F1: 0.098
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/sklearn/metrics/_classification.py:1879: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", result.shape[0])
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/sklearn/metrics/_classification.py:1879: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", result.shape[0])
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/sklearn/metrics/_classification.py:1879: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", result.shape[0])
Get features scores of different methods¶
df_modlyn_logreg = logreg.get_weights()
df_modlyn_logreg.head()
Show code cell output
| gene_name | PIM2 | ECHS1 | LINC03049 | RPL27AP5 | ENSG00000274769 | ENSG00000277770 | CTF1 | Y_RNA-586 | LINC01312 | XRCC6P2 | ... | HMOX1 | KRT8P28 | ENSG00000271945 | CHRND | ADAM7-AS2 | ENSG00000272384 | IMP4 | PSMC1P8 | HOMER3 | AIFM3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CVCL_0023 | -0.422666 | -0.506160 | -0.002956 | 0.010464 | 0.007372 | 0.011887 | -0.010289 | 0.011620 | -0.039496 | 0.003184 | ... | -0.100679 | 0.003845 | 0.601916 | 0.000430 | 0.010069 | -0.006843 | -0.434854 | -0.011490 | 0.435216 | -0.060732 |
| CVCL_0028 | -0.095305 | 0.469816 | -0.006349 | -0.004729 | -0.012226 | 0.004879 | 0.004470 | 0.010267 | -0.019992 | 0.004431 | ... | -0.138809 | -0.006756 | 0.000416 | 0.002522 | 0.009235 | 0.007154 | -0.112344 | -0.012179 | -0.044331 | 0.007553 |
| CVCL_0069 | 0.903953 | -0.345842 | -0.005748 | 0.005704 | -0.009512 | -0.002293 | -0.011909 | 0.005523 | -0.033314 | 0.008082 | ... | -0.307831 | 0.008610 | -0.066037 | -0.003863 | 0.006472 | 0.006525 | -0.259674 | -0.003985 | -0.176322 | -0.040104 |
| CVCL_0099 | -0.211742 | -0.161015 | -0.008330 | -0.009837 | -0.009997 | -0.006892 | 0.018938 | 0.007052 | -0.033342 | -0.011921 | ... | -0.234590 | 0.008841 | -0.021167 | 0.007888 | -0.006830 | -0.007106 | -0.219199 | 0.009113 | -0.061126 | -0.009620 |
| CVCL_0131 | -0.042574 | 0.669554 | 0.005480 | -0.005993 | 0.007165 | -0.004007 | 0.001241 | -0.010810 | -0.021955 | 0.009477 | ... | -0.189909 | 0.009038 | -0.206123 | 0.002917 | -0.007139 | 0.011839 | -0.582050 | 0.008407 | -0.288258 | -0.031270 |
5 rows × 100 columns
sc.tl.rank_genes_groups(adata, "cell_line", method="logreg", key_added="sc_logreg")
df_scanpy_logreg = sc.get.rank_genes_groups_df(
adata, group=None, key="sc_logreg"
).pivot(index="group", columns="names", values="scores")
df_scanpy_logreg.attrs["method_name"] = "scanpy_logreg"
df_scanpy_logreg.head()
Show code cell output
| names | ACOT9 | ADAM7-AS2 | AGGF1P9 | AIFM3 | ARHGAP23P1 | ARID5A | ATP5PB | ATRIP | BAG4 | BLVRB | ... | RPL32P23 | RPL7P6 | SNORD115-2 | TLDC2 | TSPAN9 | UBE2L3 | UBE2V1P8 | XRCC6P2 | XXYLT1-AS2 | Y_RNA-586 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| group | |||||||||||||||||||||
| CVCL_0023 | 0.659618 | 0.0 | 0.0 | -0.031030 | 0.0 | 0.231701 | -0.597661 | -0.293584 | -0.548324 | -0.266297 | ... | 0.0 | 0.0 | 0.0 | -0.100346 | -0.296451 | -0.581786 | 0.0 | 0.0 | -0.026877 | 0.0 |
| CVCL_0028 | -0.242723 | 0.0 | 0.0 | -0.004131 | 0.0 | -0.056369 | -0.127508 | -0.051344 | -0.118967 | -0.154228 | ... | 0.0 | 0.0 | 0.0 | -0.009306 | -0.237152 | 0.332722 | 0.0 | 0.0 | -0.005290 | 0.0 |
| CVCL_0069 | -0.660634 | 0.0 | 0.0 | -0.016867 | 0.0 | -0.187452 | -0.364053 | 0.430800 | -0.362276 | 0.079544 | ... | 0.0 | 0.0 | 0.0 | -0.029943 | -0.612790 | -0.662974 | 0.0 | 0.0 | -0.017092 | 0.0 |
| CVCL_0099 | 0.580846 | 0.0 | 0.0 | -0.012110 | 0.0 | -0.107890 | -0.227720 | 1.138230 | -0.206624 | -0.275042 | ... | 0.0 | 0.0 | 0.0 | -0.028184 | -0.400412 | -0.420857 | 0.0 | 0.0 | -0.009776 | 0.0 |
| CVCL_0131 | 1.401364 | 0.0 | 0.0 | -0.031490 | 0.0 | -0.405170 | 0.233426 | 0.091139 | 0.118451 | -0.426097 | ... | 0.0 | 0.0 | 0.0 | -0.241476 | 0.822093 | -0.169690 | 0.0 | 0.0 | -0.035441 | 0.0 |
5 rows × 100 columns
sc.tl.rank_genes_groups(adata, "cell_line", method="wilcoxon", key_added="sc_wilcoxon")
df_scanpy_wilcoxon = sc.get.rank_genes_groups_df(
adata, group=None, key="sc_wilcoxon"
).pivot(index="group", columns="names", values="scores")
df_scanpy_wilcoxon.attrs["method_name"] = "scanpy_wilcoxon"
df_scanpy_wilcoxon.head()
Show code cell output
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:459: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "names"] = self.var_names[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:461: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "scores"] = scores[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:464: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals"] = pvals[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:474: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "pvals_adj"] = pvals_adj[global_indices]
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/scanpy/tools/_rank_genes_groups.py:485: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
self.stats[group_name, "logfoldchanges"] = np.log2(
| names | ACOT9 | ADAM7-AS2 | AGGF1P9 | AIFM3 | ARHGAP23P1 | ARID5A | ATP5PB | ATRIP | BAG4 | BLVRB | ... | RPL32P23 | RPL7P6 | SNORD115-2 | TLDC2 | TSPAN9 | UBE2L3 | UBE2V1P8 | XRCC6P2 | XXYLT1-AS2 | Y_RNA-586 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| group | |||||||||||||||||||||
| CVCL_0023 | 0.332005 | 0.0 | 0.0 | -0.018388 | 0.0 | 0.144039 | -0.533252 | -0.193074 | -0.478088 | -0.299997 | ... | 0.0 | 0.0 | 0.0 | -0.045970 | -0.571730 | -0.687506 | 0.0 | 0.0 | -0.018388 | 0.0 |
| CVCL_0028 | -0.409188 | 0.0 | 0.0 | -0.006995 | 0.0 | -0.073444 | -0.202846 | -0.073444 | -0.181862 | -0.241316 | ... | 0.0 | 0.0 | 0.0 | -0.017487 | -0.356728 | 0.466895 | 0.0 | 0.0 | -0.006995 | 0.0 |
| CVCL_0069 | -0.796838 | 0.0 | 0.0 | -0.013621 | 0.0 | -0.143022 | -0.395014 | 0.307384 | -0.354150 | -0.024064 | ... | 0.0 | 0.0 | 0.0 | -0.034053 | -0.694680 | -0.755975 | 0.0 | 0.0 | -0.013621 | 0.0 |
| CVCL_0099 | 0.629415 | 0.0 | 0.0 | -0.009912 | 0.0 | -0.104077 | -0.287449 | 1.125018 | -0.257713 | -0.341966 | ... | 0.0 | 0.0 | 0.0 | -0.024780 | -0.505515 | -0.550119 | 0.0 | 0.0 | -0.009912 | 0.0 |
| CVCL_0131 | 2.103801 | 0.0 | 0.0 | -0.022238 | 0.0 | -0.233502 | 0.201855 | 0.049323 | -0.014255 | -0.467575 | ... | 0.0 | 0.0 | 0.0 | -0.055596 | 1.118188 | -0.118889 | 0.0 | 0.0 | -0.022238 | 0.0 |
5 rows × 100 columns
Compare feature selection results¶
compare = mn.eval.CompareScoresJaccard(
[df_modlyn_logreg, df_scanpy_logreg, df_scanpy_wilcoxon], n_top_values=[5, 10, 25]
)
compare.plot_heatmaps()
Show code cell output
compare.compute_jaccard_comparison()
compare.plot_jaccard_comparison()
Show code cell output
ln.finish()
Show code cell output
! calling anonymously, will miss private instances
→ finished Run('mmhhkAv83GkVZtqc') after 29s at 2026-07-23 11:06:02 UTC