Skip to main content

Analyze multi-modal single-cell data!

Project description

Project generated with PyScaffold PyPI-Server Downloads Unit tests

scran, in Python

Overview

The scranpy package provides Python bindings to the single-cell analysis methods in the libscran C++ libraries. It performs the standard steps in a typical single-cell analysis including quality control, normalization, feature selection, dimensionality reduction, clustering and marker detection. This package is effectively a mirror of its counterparts in Javascript (scran.js) and R (scrapper), which are based on the same underlying C++ libraries and concepts.

Quick start

Let's fetch a dataset from the scrnaseq package:

import scrnaseq 
sce = scrnaseq.fetch_dataset("zeisel-brain-2015", "2023-12-14", realize_assays=True)
print(sce)
## class: SingleCellExperiment
## dimensions: (20006, 3005)
## assays(1): ['counts']
## row_data columns(1): ['featureType']
## row_names(20006): ['Tspan12', 'Tshz1', 'Fnbp1l', ..., 'mt-Rnr2', 'mt-Rnr1', 'mt-Nd4l']
## column_data columns(9): ['tissue', 'group #', 'total mRNA mol', 'well', 'sex', 'age', 'diameter', 'level1class', 'level2class']
## column_names(3005): ['1772071015_C02', '1772071017_G12', '1772071017_A05', ..., '1772063068_D01', '1772066098_A12', '1772058148_F03']
## main_experiment_name: gene
## reduced_dims(0): []
## alternative_experiments(2): ['repeat', 'ERCC']
## row_pairs(0): []
## column_pairs(0): []
## metadata(0):

Then we call scranpy's analyze() functions, with some additional information about the mitochondrial subset for quality control purposes. This will perform all of the usual steps for a routine single-cell analysis, as described in Bioconductor's Orchestrating single cell analysis book.

import scranpy
results = scranpy.analyze_se(
    sce,
    rna_qc_subsets = {
        "mito": [name.startswith("mt-") for name in sce.get_row_names()]
    }
)
print(results["x"])
## class: SingleCellExperiment
## dimensions: (20006, 2874)
## assays(2): ['counts', 'logcounts']
## row_data columns(6): ['featureType', 'mean', 'variance', 'fitted', 'residual', 'hvg']
## row_names(20006): ['Tspan12', 'Tshz1', 'Fnbp1l', ..., 'mt-Rnr2', 'mt-Rnr1', 'mt-Nd4l']
## column_data columns(15): ['tissue', 'group #', 'total mRNA mol', ..., 'keep', 'size_factor', 'graph_cluster']
## column_names(2874): ['1772071015_C02', '1772071017_G12', '1772071017_A05', ..., '1772066097_D04', '1772063068_D01', '1772066098_A12']
## main_experiment_name: gene
## reduced_dims(3): ['PCA', 'TSNE', 'UMAP']
## alternative_experiments(2): ['repeat', 'ERCC']
## row_pairs(0): []
## column_pairs(0): []
## metadata(2): qc PCA

We can extract useful bits and pieces from the SingleCellExperiment stored as x:

print(results["x"].get_column_data()[:,["sum", "detected", "subset_proportion_mito", "size_factor", "graph_cluster"])
##                               sum          detected subset_proportion_mito         size_factor    graph_cluster
##                <ndarray[float64]> <ndarray[uint32]>     <ndarray[float64]>  <ndarray[float64]> <ndarray[int64]>
## 1772071015_C02            22354.0              4871    0.03462467567325758  1.4587034836358181                0
## 1772071017_G12            22869.0              4712    0.04901832174559447  1.4923096522889652                0
## 1772071017_A05            32594.0              6055   0.029207829661900962  2.1269115749139242                0
##                               ...               ...                    ...                 ...              ...
## 1772066097_D04             2574.0              1441   0.005827505827505828 0.16796558856932076                6
## 1772063068_D01             4993.0              2001    0.19587422391347886 0.32581669919449047                6
## 1772066098_A12             3099.0              1510    0.06550500161342368 0.20222430418660645               13

print(results["x"].get_reduced_dimension("TSNE"))
## [[  5.56742365 -28.68868021]
##  [  5.60398273 -28.02309408]
##  [  4.77422687 -28.70557818]
##  ...
##  [ 18.76434892   8.48223628]
##  [ 17.69108131   3.82950607]
##  [ 14.09402365   6.71953971]]

print(results["x"].get_reduced_dimension("UMAP"))
## [[10.36782455 -1.76653302]
##  [10.24362564 -1.65133715]
##  [10.46131039 -1.62113261]
##  ...
##  [-3.18933988 -6.42624807]
##  [-2.90072227 -5.33980703]
##  [-5.86072397 -7.62296963]]

We can also inspect the top markers for each cluster in each modality:

print(results["markers"]["rna"].get_names())
## ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']

print(scranpy.preview_markers(results["markers"]["rna"]["0"]))
## BiocFrame with 10 rows and 3 columns
##                       mean           detected                lfc
##         <ndarray[float64]> <ndarray[float64]> <ndarray[float64]>
##    Gad1  4.722606264371632 0.9967105263157895 4.5144234560400935
##    Gad2 4.3881067939564335 0.9967105263157895  4.212918994316072
##   Ndrg4  4.336870587905828 0.9967105263157895 2.5370838460299865
##   Stmn3  4.676829189457486  0.993421052631579 2.6318375392719537
##  Vstm2a  2.866641571231044 0.9572368421052632 2.6178131058482004
##  Nap1l5    4.2569402746771                1.0 3.0585216754783877
##  Slc6a1 3.6726655518924356 0.9901315789473684 3.0484528790789396
##   Rab3c 3.8515412644109457 0.9802631578947368 2.9407642089786044
##  Tspyl4 3.3162021744969783                1.0   2.10987030054009
## Slc32a1    1.9797938787573 0.8947368421052633 1.9555828312546393

Check out the reference documentation for more details.

Multiple batches

To demonstrate, let's grab two pancreas datasets from the scrnaseq package. Each dataset represents a separate batch of cells generated in different studies.

import scrnaseq 
gsce = scrnaseq.fetch_dataset("grun-pancreas-2016", "2023-12-14", realize_assays=True)
msce = scrnaseq.fetch_dataset("muraro-pancreas-2016", "2023-12-19", realize_assays=True)

They don't have the same features, so we'll just take the intersection of their row names before combining them into a single SingleCellExperiment object:

import biocutils
common = biocutils.intersect(gsce.get_row_names(), msce.get_row_names())
combined = biocutils.relaxed_combine_columns(
    gsce[biocutils.match(common, gsce.get_row_names()), :],
    msce[biocutils.match(common, msce.get_row_names()), :]
)
print(combined)
## class: SingleCellExperiment
## dimensions: (18499, 4800)
## assays(1): ['counts']
## row_data columns(2): ['symbol', 'chr']
## row_names(18499): ['A1BG-AS1__chr19', 'A1BG__chr19', 'A1CF__chr10', ..., 'ZYX__chr7', 'ZZEF1__chr17', 'ZZZ3__chr1']
## column_data columns(4): ['donor', 'sample', 'label', 'plate']
## column_names(4800): ['D2ex_1', 'D2ex_2', 'D2ex_3', ..., 'D30-8_94', 'D30-8_95', 'D30-8_96']
## main_experiment_name: endogenous
## reduced_dims(0): []
## alternative_experiments(0): []
## row_pairs(0): []
## column_pairs(0): []
## metadata(0):

We can now perform a batch-aware analysis, where the blocking factor is also used in relevant functions to avoid problems with batch effects. This yields mostly the same set of results as before, but with an extra MNN-corrected embedding for clustering, visualization, etc.

import scranpy
block = ["grun"] * gsce.shape[1] + ["muraro"] * msce.shape[1]
results = scranpy.analyze(combined, block=block) # no mitochondrial genes in this case...
print(results["x"].get_reduced_dimension_names())
## ['PCA', 'MNN', 'TSNE', 'UMAP']

The blocking factor is also used during marker detection to ensure that any batch effects do not interfere with marker scoring.

print(results["markers"]["rna"].get_names())
## ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']

print(scranpy.preview_markers(results["markers"]["rna"]["0"]))
## BiocFrame with 10 rows and 3 columns
##                              mean           detected                lfc
##                <ndarray[float64]> <ndarray[float64]> <ndarray[float64]>
##    PRSS1__chr7 7.4960140622383635                1.0  6.112707795838959
## PLA2G1B__chr12 5.3256781931032435 0.9767441860465116 4.9768663423161525
##   SPINK1__chr5  7.226025132762255                1.0  5.484853630696096
##  PRSS3P2__chr7  6.414465893460902                1.0  5.474642067942027
##   CTRB1__chr16  6.242340887932875                1.0  5.439850813378681
##   CTRB2__chr16  6.211977585350613 0.9767441860465116  5.390247433870743
##   CELA3A__chr1  5.749981006377225 0.9922480620155039  5.379827932369857
##     CPA1__chr7  5.956052489801642 0.9922480620155039  5.398848064205473
##    REG1A__chr2  8.505688048945858                1.0   5.69363720328606
##     CPA2__chr7  4.394240756079104 0.9224806201550388  4.167356591402403

Multiple modalities

Let's grab a 10X Genomics immune profiling dataset (see here), which contains count data for the entire transcriptome and targeted proteins:

import singlecellexperiment
input = singlecellexperiment.read_tenx_h5("immune_3.0.0-tenx.h5", realize_assays=True)
input.set_row_names(input.get_row_data().get_column("id"), in_place=True)

We split our SingleCellExperiment into separate objects for genes and ADTs. We use the gene dataset as the main experiment and store the ADT object as an alternative experiment.

feattypes = input.get_row_data().get_column("feature_type")
gene_data = input[[x == "Gene Expression" for x in feattypes],:]
adt_data = input[[x == "Antibody Capture" for x in feattypes],:]

sce = gene_data
sce.set_alternative_experiment("ADT", adt_data, in_place=True)
print(sce)
## class: SingleCellExperiment
## dimensions: (33555, 8258)
## assays(1): ['counts']
## row_data columns(7): ['feature_type', 'genome', 'id', 'name', 'pattern', 'read', 'sequence']
## row_names(33555): ['ENSG00000243485', 'ENSG00000237613', 'ENSG00000186092', ..., 'IgG2b', 'CD127', 'CD15']
## column_data columns(1): ['barcodes']
## column_names(0):
## main_experiment_name:
## reduced_dims(0): []
## alternative_experiments(0): []
## row_pairs(0): []
## column_pairs(0): []
## metadata(0):

print(sce.get_alternative_experiment("ADT"))
## class: SingleCellExperiment
## dimensions: (17, 8258)
## assays(1): ['counts']
## row_data columns(7): ['feature_type', 'genome', 'id', 'name', 'pattern', 'read', 'sequence']
## row_names(17): ['CD3', 'CD19', 'CD45RA', ..., 'IgG2b', 'CD127', 'CD15']
## column_data columns(1): ['barcodes']
## column_names(0):
## main_experiment_name:
## reduced_dims(0): []
## alternative_experiments(0): []
## row_pairs(0): []
## column_pairs(0): []
## metadata(0):

And now we can run the analysis, with some additional specification of the IgG subsets for ADT-related quality control. ADT-specific results are stored in the alternative experiment of the output x:

import scranpy
results = scranpy.analyze_se(
    sce,
    adt_altexp="ADT",
    rna_qc_subsets = { 
        "mito": [n.startswith("MT-") for n in gene_data.get_row_data().get_column("name")]
    },
    adt_qc_subsets = {
        "igg": [n.startswith("IgG") for n in adt_data.get_row_data().get_column("name")]
    }
)

print(results["x"].get_alternative_experiment("ADT").get_column_data()[:,["sum", "detected", "subset_sum_igg", "size_factor"]])
## BiocFrame with 6779 rows and 4 columns
##                       sum          detected     subset_sum_igg        size_factor
##        <ndarray[float64]> <ndarray[uint32]> <ndarray[float64]> <ndarray[float64]>
##    [0]             2410.0                17               21.0 0.7935940817266915
##    [1]             2637.0                17               30.0 0.7941033166783458
##    [2]             5551.0                17               29.0  0.895364130394313
##                       ...               ...                ...                ...
## [6776]             5079.0                17               11.0 0.7920783948957917
## [6777]             1757.0                17               12.0 0.6649272283074951
## [6778]             2312.0                17               33.0 0.7684763715276961

print(results["x"].get_alternative_experiment("ADT").get_reduced_dimension_names())
## ['PCA']

analyze_se() combines the RNA and ADT data into a single embedding for downstream steps like visualization and clustering. This ensures that those steps will use information from both modalities.

print(results["x"].get_reduced_dimension_names())
## ['PCA', 'combined', 'TSNE', 'UMAP']

import biocutils
print(biocutils.table(results["x"].get_column_data()["graph_cluster"]))
## ['0'=401, '1'=801, '2'=282, '3'=1030, '4'=1142, '5'=279, '6'=922, '7'=198, '8'=375, '9'=212, '10'=884, '11'=47, '12'=13, '13'=48, '14'=58, '15'=87]

Similarly, analyze_se() will compute marker statistics for the ADT data:

print(scranpy.preview_markers(results["markers"]["adt"]["0"]))
## BiocFrame with 10 rows and 3 columns
##                      mean           detected                  lfc
##        <ndarray[float64]> <ndarray[float64]>   <ndarray[float64]>
##    CD3 10.710798038087853                1.0    3.073794979159913
##  CD127  7.202083836362728                1.0   2.1670932585149587
## CD45RO  7.062122120526255                1.0   1.6391671901349703
##   CD8a  7.530206276892356                1.0   1.8636563581508114
##   CD56  5.110427162087626                1.0   0.6727102618980374
##   PD-1  5.739783018333582                1.0  0.19200190878211132
##   IgG1  4.330276551600134                1.0 -0.02840790745859983
##   CD25  5.088783799767125                1.0  -0.1269303811218677
##  TIGIT 3.6629345003643983 0.9975062344139651 -0.28573778753415674
##  IgG2a  3.143818721927284 0.9900249376558603  -0.3191747955354897

Customizing the analysis

Most parameters can be changed by modifying the relevant arguments in analyze_se(). For example:

import scrnaseq 
sce = scrnaseq.fetch_dataset("zeisel-brain-2015", "2023-12-14", realize_assays=True)
is_mito = [name.startswith("mt-") for name in sce.get_row_names()]

import scranpy
results = scranpy.analyze(
    sce,
    rna_qc_subsets = {
        "mito": is_mito
    },
    more_build_graph_args = {
        "num_neighbors": 10
    },
    more_cluster_graph_args = {
        "multilevel_resolution": 2
    },
    more_rna_pca_args = {
        "number": 15
    },
    more_tsne_args = {
        "perplexity": 25
    },
    more_umap_args = {
        "min_dist": 0.05
    }
)

For finer control, users can call each step individually via lower-level functions. A typical RNA analysis might be implemented as:

res = scranpy.quick_rna_qc_se(sce, subsets={ "mito": is_mito })
res = res[:,res.get_column_data()["keep"]]
res = scranpy.normalize_rna_counts_se(res, size_factors=res.get_column_data()["sum"])
res = scranpy.choose_rna_hvgs_se(res)
res = scranpy.run_pca_se(res, features=res.get_row_data()["hvg"])
res = scranpy.run_all_neighbor_steps_se(res)
markers = scranpy.score_markers_se(res, groups=res.get_column_data()["clusters"])

Check out analyze_se() source code for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scranpy-0.3.0.tar.gz (129.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

scranpy-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (957.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl (755.8 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

scranpy-0.3.0-cp314-cp314t-macosx_10_15_x86_64.whl (852.5 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

scranpy-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (958.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp314-cp314-macosx_11_0_arm64.whl (744.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

scranpy-0.3.0-cp314-cp314-macosx_10_15_x86_64.whl (843.4 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

scranpy-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (958.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (744.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

scranpy-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl (843.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

scranpy-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (958.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (744.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

scranpy-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl (843.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

scranpy-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (955.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (744.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

scranpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl (838.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

scranpy-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

scranpy-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (953.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

scranpy-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (742.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

scranpy-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl (836.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file scranpy-0.3.0.tar.gz.

File metadata

  • Download URL: scranpy-0.3.0.tar.gz
  • Upload date:
  • Size: 129.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for scranpy-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2e1c2b3afb85b5bdd874c4c50a95c9b2d3e82327455e05f52b9a9e9f93acf5cb
MD5 5db880319be8529a84e0e038762ac880
BLAKE2b-256 fc2161861caf88b47648cf1acea4e8b71f5ed70c64371c6588cfec99bf532b5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0.tar.gz:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f842cb76830a6e205b53b88229a77144036c02ce1ea1b6ed7f45643e035b3060
MD5 535febd14edf25c1efbfdea8b518a505
BLAKE2b-256 61ac7244d0a9d7a373f5d2f652dc7aa0b69d5ff65cb940a930a668168d69b70b

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c994f21c149fd5502780d7853c664b79f000ebf4e8a4c990a5e07f794a73e4c1
MD5 b1a24663e1bf5f2ef090c3b9a074bf3c
BLAKE2b-256 becb0b810b4a0f9c9da34933fadcafb5a45c5f1f54c479f97f1e258008092fe4

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 501a09bb2794412a3c3e7a27002ea41fb9f9ca5727e79370b7aa1c2e7e10d714
MD5 74ed218e57f92c713de0caa0063029d7
BLAKE2b-256 6ed095866349578577cc6c956277ac07c8642e18c8e9fab535a29c0bfad83d3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 d80b382a8eaeb47496ea590a9829c9efa1935bc6f67a932b5bc39752971826bc
MD5 ae0d76665c46bc131736f4abb27a42cd
BLAKE2b-256 845fab9fcc00b38b2282a02646eee69718159eb99aa151adbe75175de0840bd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6f0341bd8f0e2b0fdfa22a70d06c4511b36264b3ee2e9a7a7b6b59504d3ec841
MD5 6fcbeed07f10d61423c76f51c4c5072e
BLAKE2b-256 df0fc4100ecf28f1933577a26c97474e6e30d962c0de85a4e500e18e73025212

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15b90ba248aa9eae660ea4fdaeaedbf2209ef26cb3ff040d9f1b3102e536ffdd
MD5 af06c8dcc8634c6bbb0604929448ad0a
BLAKE2b-256 6f92c6bb6b551e2cb7dcdb327ba6ee6ceb818d3d31762af7395dc8d5737a3919

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce16a916ba722ba29e4b5c96fb262568cf2213c0840ef523edfeb35fca40ad29
MD5 384d74e806cf5b93f291eb0ea581e69b
BLAKE2b-256 0d367788294672e25cbfed565f29da8a7ca48f370fbcdad1dab79205923974d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 cf4da7a0ff8efd50663548f7eb7c6ba4a382c6a3253a4d7358a319a10ae000bc
MD5 73f4d56de1bf3e7ce7f240fd6f39d89f
BLAKE2b-256 c97528f23e1a1de6d9a00c1c9bb07bdc6a5ffc32e5728325797da301859d3a96

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bbfcc61a2710a1d65e0066c0344deacf72a9532f4eab8c87acb998618664dba2
MD5 b6d77d5e1fa21ed03dd71ec8089b3f71
BLAKE2b-256 c232481c2a3e695f6ab2386cab6335d578ea03877a1b2c8287c4191e329f98a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 54dd61c69065006eabb0e753a40aca083cd2d78f2d71eac6a0127acf27c2cadf
MD5 c214b5b841f046e31a4366a78528d9d1
BLAKE2b-256 a6b6cfc435d74ffb16abd49ab1834288ee5c8695d8be46dbf753de07a65f5f13

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6daeb5f477eacb1677d8989283e92b24f0eeacc78c74b285f1dfb935cdd5b6ab
MD5 111fc1a6edc311f58a90095f93752ab0
BLAKE2b-256 50a83978695aaa6ae33a045ec91b6ab1cd5d830c306f86c98e1a99c65dae1538

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 30490610b4db77a6ea1868d53bdf60470399f1712427d5999574fb8893344dfe
MD5 53d38f798a3872848a476487a6a27d2a
BLAKE2b-256 9e901c456d51c6bb0809f9f94e589fd985d8b13b301bb9cb3c3f4d8474e85fb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 677090277cd7c58d5ac1cb54472da05fd066916230ac6de5cbd544d5a7c30122
MD5 672c06062c8c76ccccb0dab0309a2bb6
BLAKE2b-256 1713efa966ab20fbfc8ff87dd89eaed1a6406414fb5e8912f020687eb15a186c

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1e7b0c3cdc401e6d4c2352e84f1ef186fc1f4238f0be53d2470cf3d342194df
MD5 d8b97d075248174c045f7d75e28ee5ab
BLAKE2b-256 c6ed2867da9d297578dd037082ae387c754d2142b8e63f0d55c6c109c77c9398

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64d1b9596a27044ef5dc76c889cdd1849fc7398e5723942067b4fe3ca7bbcd5b
MD5 2b602fcb4edb59d2bf5206ae8ef428d8
BLAKE2b-256 044e59bbe0d326bedc9a296bb1f805b26b0f051f41298edd3cd48312be0b83f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f7b79aab3905d8d4c2f5d446b9a9e72f65317a0af85c33ddfcdba064a1916fd9
MD5 134a7260d97154e2d78f697b3cec1406
BLAKE2b-256 e6eb33d6d58475da0c70fe32752b19b252422013b318878d1be53b0d0d147664

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7eee6ad539965f4b2ceeb3246842cc04014464cb137bf2060bfac45f7cb8270a
MD5 0c924c189f32e7fc2db2db1776f733fa
BLAKE2b-256 b026866fc089c45c1d3d331adae1d01c2c0c380259a074b24105d693c87a9b07

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9d8d32d13dbe026497c5da6633482a47cbfb544a88d29aba83290f47dbeee2d
MD5 e08050ab2f7c44ca7f0d85bf8f3fc2be
BLAKE2b-256 f274b3bf6498e36a3c9ce084a0ffb875ad81c6554ebce534a75a68db498659b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4274c4b8c810b0ab59ef7e3d4897468d753be925db9694576e8e6fb08dca5f7b
MD5 2b8f53339e85307ed0c4b81fd7f8f2af
BLAKE2b-256 4ea164e8297b4ecdcd4fb41c0f23121f076f9805e6e1559b37bac249bf856961

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f66ff6e329eac7c1d31746a720068ce6d677ee25c0b94d365eeaf1e980e38ee3
MD5 a44e81fe46f6a08f18cda32e4b56f53d
BLAKE2b-256 aba87c75d45384d09d5072f6404de98efd50998a6a678b9828f8d5fec027dabe

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 768a234f10580149ad0324bf2bdd164c8edf85db1639ed39197610a327672a40
MD5 b110b22f08b4c3c94228949a95599664
BLAKE2b-256 a54c023a4d8ae28ff4135d13ee983bb5e7f163472fda8cb35be0455fd66ca6c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb322dddc8b5237f7c93be8af411388098233f174594e85c8c946ca913bdcf5a
MD5 42120e7458e92a88e1af352c99ebe405
BLAKE2b-256 97ac989a21d4bad7d4554596bb2a31f617ec64889f5ebb7934956ba21cf3e027

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 28726074c2b1ea289296125f8f82b439c51b8acd82ece794a69459196b305186
MD5 15254cdda798b4eb52d68eb46a843fbc
BLAKE2b-256 5038efa8b6936eb833c343c13d089b79b51fff825555c2484cb961c16e2bc95f

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scranpy-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aff3010e3d6f28d2e803ffd6dca2d0f4e3b6a10d618de11a5ee8e95e105d895b
MD5 f52da64e031f0d0e17d4d0b0a8fee7c3
BLAKE2b-256 149d98960c45125b26b91ccb0ec3eca943078a571fb9f97d117250a42c41ea26

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish-pypi.yml on libscran/scranpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page