Skip to main content

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.

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.1.tar.gz (133.2 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.1-cp315-cp315-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.15musllinux: musl 1.2+ x86-64

scranpy-0.3.1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (983.1 kB view details)

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

scranpy-0.3.1-cp315-cp315-macosx_11_0_arm64.whl (791.6 kB view details)

Uploaded CPython 3.15macOS 11.0+ ARM64

scranpy-0.3.1-cp315-cp315-macosx_10_15_x86_64.whl (860.4 kB view details)

Uploaded CPython 3.15macOS 10.15+ x86-64

scranpy-0.3.1-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.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (983.1 kB view details)

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

scranpy-0.3.1-cp314-cp314-macosx_11_0_arm64.whl (791.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

scranpy-0.3.1-cp314-cp314-macosx_10_15_x86_64.whl (860.4 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

scranpy-0.3.1-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.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (982.6 kB view details)

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

scranpy-0.3.1-cp313-cp313-macosx_11_0_arm64.whl (791.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

scranpy-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl (860.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

scranpy-0.3.1-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.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (982.6 kB view details)

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

scranpy-0.3.1-cp312-cp312-macosx_11_0_arm64.whl (790.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

scranpy-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl (860.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

scranpy-0.3.1-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.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (985.8 kB view details)

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

scranpy-0.3.1-cp311-cp311-macosx_11_0_arm64.whl (790.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

scranpy-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl (854.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

scranpy-0.3.1-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.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (984.6 kB view details)

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

scranpy-0.3.1-cp310-cp310-macosx_11_0_arm64.whl (788.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

scranpy-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl (853.0 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: scranpy-0.3.1.tar.gz
  • Upload date:
  • Size: 133.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for scranpy-0.3.1.tar.gz
Algorithm Hash digest
SHA256 884d2f45dab2769142a604ea1baeb7c8f5958d50f4744dee5b25018283c94dc5
MD5 ba7544af9bd6bece6216409fd5c3236b
BLAKE2b-256 67562d5aa544b40dbdb1e459db47dcf85b2e4ac2da9489036823ab4ed0018cf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1.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.1-cp315-cp315-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp315-cp315-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 47afad1c1aa19121c4b0104b0f4601b7b0297d7b72865a3dcb58b66ac5d34071
MD5 c0a42988081b78e0b0c4a3a75ba13bd6
BLAKE2b-256 f680258814adb020b8ccaab07e25fcc1f535ca091de33415e27c6952c6b62486

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-cp315-cp315-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.1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6924a424fc92ecbb61af8894872c61a8b91c5f3e1c848227933623009e62ad4
MD5 fc694acd76503d89e1c2908d7f6a291d
BLAKE2b-256 a3cebf01723ada4cee830c2622aff8c2d5e06cdf95179f31c246981be39728d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-cp315-cp315-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.1-cp315-cp315-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp315-cp315-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2c330e092043a893cbc2c94cbcbf58772b179021f5227613fa18a9d6dce65d22
MD5 05a384a19ade536075ae8227fe78218e
BLAKE2b-256 06b4fac3f903393402007a56e558cc2909cba0bb1944234753d2a80b06df2eb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-cp315-cp315-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.1-cp315-cp315-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp315-cp315-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 c0c68de5e79a9314c1cb52adacd98b160beb1cf26cb1e96b5c9209fd8530799b
MD5 45fb36e2bb7130d46a25436d129cfe12
BLAKE2b-256 11093ab96540b45d4438e32e52bb13a6155a5c93c4dc46a4b1e0afae10cc4356

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-cp315-cp315-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.1-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d62b89d9c65089e5d2461328fb6b661f0d016151622bcdf342a92463d43670f7
MD5 1b8f6198657f2e159e1e7f1bfdbf5b05
BLAKE2b-256 6d0da98ebac2f52d1395dcaa376a6c53255e2310963658cbd7b2728e0197b4ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f9977f436fd66cd01c94fc1cf8c0e4142fe60be3eb12bb73f592acd8deedb9c9
MD5 23148d66271a5f8fc8c8507ba2b61e11
BLAKE2b-256 d1363f020eaca2219172cf64bfc444d294648b2e8bcb89ae74706bb194604860

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c081aa5f76ec55fb7328e136d0d065c09849955bc213ec392f73819314c5fe8
MD5 db70f480079d22e6d858ca85319b0fdf
BLAKE2b-256 b9e07c361e62874760692d857f39bd92ff85a035e0baf376ebca4b8a9e034f5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 990f4c654a773a379bfe46111978ee35c9243f5e6033ad16cf91d5c9b704d1c3
MD5 831fa5ca6ceb48e3a5822fabb6dbdcaa
BLAKE2b-256 e25f697b81152c3a629cf279763b5b759185cfdf1f5d9097e4c13ae81d751df8

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 988079b9c4aa7a82ec26066e05e15154b255a82189dbe7a7f053e5239218caa8
MD5 e62e5a772301c85f6b6ca1a6499801f8
BLAKE2b-256 88d188a2dc63a016b93632f81073da1f559566c732403a796fd27d4280d3e898

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4484f53a5dc6e5a233cd986e3d5ea1afa6ac35d2f0823fdd7fc7096c32a826d
MD5 c87ed89d0f4dcd626a2d651b5f1d4272
BLAKE2b-256 d2900584edc3cef0e88dd37627643fda49c1ed8f27ab578266a12b64d6c8ef15

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df740eb90e871624094054fb480c32767950ebacf5deef7eea6ebc787d36f03e
MD5 c1026f7b17c4ffbe2867e7b0c8810f3d
BLAKE2b-256 36b895230edcb348c0b893c6879accb79ebb75c1ee82f2cd9b55cb7b3b46be58

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c68a37004016f3d5b4c1943984e46f950aefc58a8684929795355a4adcd672a9
MD5 a48e2f32da2de1f8fe85dfe90351db70
BLAKE2b-256 32572bf9335739c1405c872318b5f681b6ba9d5672ee02ab77c359c8f45a0ed7

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 146c0c65e5317ba15013a07c0cd2397982153d6a6f535ad0777b67560f938f42
MD5 08b6767c91d7fbbdb0ccb33cf1d73400
BLAKE2b-256 93e440ea77cdab72c28089498e0e504db802d1d6fa417771ed30ed29ae34ef20

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f8f364cf768db5da078920a6825643cd3ae4a11f5044fa51c0a52d292732803
MD5 529639b8ecbec5138f55c3e05ccdc2dc
BLAKE2b-256 ac75221e53941c918a5605847062413107ba29a2ae49587402bc79bb08bab1a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70d35985d41cb00f5c36301dd0d4f05987401797a06ae33bcb9b1742ea5053fa
MD5 e10bf1f924669e1b0f21926582292ee4
BLAKE2b-256 8536f9b9b377524c97be3325e5ec7eb5a31cacfc3cee46cc6c18df6ac556dcdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c976a455a5f7422657b991d212eeed6787b9cae5c1e712d633e67f2c3e88579e
MD5 7e631ce69ed94b781f485dcf03478144
BLAKE2b-256 c2a77d952cef5a1f1ccac1985848358a37b968c642ebfc738ea8d5897217299f

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a836853fa618a3b0c1208c019832ca834e78c8d093aa7f7d7605ebcaa1ff3c70
MD5 bc0c7dce4b559a4f4d41a2e2f18f1898
BLAKE2b-256 558753d0c42a48fcdb213dc40300f57ae455bbb6ac4a505a82e12d564f0764df

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f980b74b83ea578108bdbf54aed33fbd4a062ceaf79d55943de7e147c49c3e8
MD5 7db4859c9d62b5cb74c73841df31b86c
BLAKE2b-256 2c5895bb31a42a3dd6efc7e710e055cac0f5999f4ce4382bf3652c680d61f61f

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70c222d4b973968218161ccc87f83f5b76b9b70c7e34f831520ff65914fb14dd
MD5 5ef31a6dfeff149a9228ba4bbed7d0bb
BLAKE2b-256 351fbb40a9cd5288cede87082c05dbcccda88de30111d59a4e569c23b715c5a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 105ddfe69f6cc301315bdec599dd7bd5fb6057eea39c5596739f3552a9d4383c
MD5 13b14c33ad0f4b9e6a5403b4b69bdb85
BLAKE2b-256 740075f6d20181c168a38873c31023e06c8c392fd0d65cb293049ca1d4accda1

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 268e6bd1de7a705efc7a52319a90b76c4de518a53bd27131bdf55ed27ea5c8c7
MD5 599370db41040b1d810f2f032c4963f2
BLAKE2b-256 f7b9ea7f4ad538197a23efa8eccf235e7b39d0d7e3a5fbf7eaacfb6da77c83fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 01ca3df6239554e289256fe672a8c26f84bb7026b55df96029d54afd57a82fe9
MD5 4224a454a9cf93a8dc2107c577593009
BLAKE2b-256 4bb0b7200a97e0cd6aae2374df5d55dce955392432579bd3a5ea651832972e26

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee2ea7b00e15c028a6494f63841d165041be1b20d40ba5b56f186854132d7aa1
MD5 1f01b2bac0542ab1203982425fc8e51c
BLAKE2b-256 b0cb31537f5aff4c4fbddf18648ecaf322ef264d026af952b443571ff546e7d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 247df21ff5e3e78ffeecbd706d9909cd8a2d3cb0cb4d84d7d0449bae779db842
MD5 c44a77829a5dce61f6f23cf934df8d6d
BLAKE2b-256 640912fa2c2bf49bd743b37939f0607e0dc251006a88d828ce04b7acad70bb7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.3.1-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.

Release history Release notifications | RSS feed

This release

0.3.1 This release

25 files

0.3.0

25 files

0.2.2

21 files

0.2.1

21 files

0.2.0

21 files

0.1.3

17 files

0.1.2

13 files

0.1.1

13 files

0.1.0

13 files

0.0.4

13 files

0.0.3

13 files

0.0.2

13 files

0.0.1

1 file

Supported by

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