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.

import scranpy
results = scranpy.analyze(
    sce,
    rna_subsets = {
        "mito": [name.startswith("mt-") for name in sce.get_row_names()]
    }
)

This will perform all of the usual steps for a routine single-cell analysis, as described in Bioconductor's Orchestrating single cell analysis book. It returns an object containing clusters, t-SNEs, UMAPs, marker genes, and so on:

print(results.clusters)
## [ 0  0  0 ...  6  6 13]

print(results.tsne)
## [[  6.24189264   6.12559936   5.41776875 ...  20.07822751  18.25022123
##    14.78338538]
##  [-28.82249121 -28.18510674 -28.92849565 ...   7.73694327   3.70750309
##     7.13103324]]

print(results.umap)
## [[ 9.84396648  9.73148155  9.83376408 ... -6.64551735 -5.74155378
##   -4.41887522]
##  [-1.26350224 -1.16540933 -1.13979638 ... -5.63315582 -4.83151293
##   -6.02484226]]

first_markers = results.rna_markers.to_biocframes(summaries=["median"])[0]
first_markers.set_row_names(results.rna_row_names, in_place=True)
print(first_markers)
## BiocFrame with 20006 rows and 6 columns
##                        mean            detected     cohens_d_median          auc_median   delta_mean_median delta_detected_median
##          <ndarray[float64]>  <ndarray[float64]>  <ndarray[float64]>  <ndarray[float64]>  <ndarray[float64]>    <ndarray[float64]>
## Tspan12 0.35759151503119846  0.3157894736842105 0.31138667468315545  0.5989624247185128 0.31138667468315545   0.31138667468315545
##   Tshz1  0.5997779968274406 0.41776315789473684 0.36865087228075244  0.6031352215283973 0.36865087228075244   0.36865087228075244
##  Fnbp1l  1.1660581606996154              0.6875  0.7644031115934953  0.6905056759545924  0.7644031115934953    0.7644031115934953
##                         ...                 ...                 ...                 ...                 ...                   ...
## mt-Rnr2   6.966227511583628  0.9967105263157895 -0.7666238430581961  0.2928277982073087 -0.7666238430581961   -0.7666238430581961
## mt-Rnr1   4.914541788016454  0.9769736842105263 -0.4847704371628273  0.3834708208344696 -0.4847704371628273   -0.4847704371628273
## mt-Nd4l  3.2901199968427246  0.9342105263157894 -0.5903983282435646 0.30724666142969365 -0.5903983282435646   -0.5903983282435646

Users can also convert the results into a SingleCellExperiment for easier manipulation:

print(results.to_singlecellexperiment())
## class: SingleCellExperiment
## dimensions: (20006, 2874)
## assays(2): ['filtered', 'normalized']
## row_data columns(5): ['mean', 'variance', 'fitted', 'residual', 'is_highly_variable']
## row_names(20006): ['Tspan12', 'Tshz1', 'Fnbp1l', ..., 'mt-Rnr2', 'mt-Rnr1', 'mt-Nd4l']
## column_data columns(5): ['sum', 'detected', 'subset_proportion_mito', 'size_factors', 'clusters']
## column_names(2874): ['1772071015_C02', '1772071017_G12', '1772071017_A05', ..., '1772066097_D04', '1772063068_D01', '1772066098_A12']
## main_experiment_name:
## reduced_dims(3): ['pca', 'tsne', 'umap']
## alternative_experiments(0): []
## row_pairs(0): []
## column_pairs(0): []
## metadata(0):

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.

import scranpy
block = ["grun"] * gsce.shape[1] + ["muraro"] * msce.shape[1]
results = scranpy.analyze(combined, block=block) # no mitochondrial genes in this case...

This yields mostly the same set of results as before, but with an extra MNN-corrected embedding for clustering, visualization, etc.

results.mnn_corrected.corrected
## array([[-1.87690275e+01, -2.20133721e+01, -2.01364711e+01, ...,
##          1.60988874e+01, -2.10494187e+01, -9.41325421e+00],
##        [ 9.95069366e+00,  1.12168142e+01,  1.40745981e+01, ...,
##         -5.63689417e+00, -1.46003926e+01, -4.02325382e+00],
##        [ 1.17917046e+01,  8.40756681e+00,  1.24557851e+01, ...,
##          3.65281722e+00, -1.13280613e+01, -1.12939448e+01],
##        ...,
##        [-4.20177077e+00,  3.64443391e-01,  1.13834851e+00, ...,
##          1.43898885e-02, -2.24228270e+00, -5.89749453e-01],
##        [-2.49456306e+00,  6.82624452e-01,  2.30363317e+00, ...,
##          1.09145269e+00,  3.17776365e+00,  8.27058276e-01],
##        [-2.03562222e+00,  2.04701389e+00,  5.64774034e-01, ...,
##          4.31078606e-01, -4.02375136e-01,  8.52493315e-01]],
##       shape=(25, 3984))

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
sce = singlecellexperiment.read_tenx_h5("immune_3.0.0-tenx.h5", realize_assays=True)
sce.set_row_names(sce.get_row_data().get_column("id"), in_place=True)
## 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):

We split it to genes and ADTs:

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

And now we can run the analysis:

import scranpy
results = scranpy.analyze(
    gene_data,
    adt_x = adt_data, 
    rna_subsets = { 
        "mito": [n.startswith("MT-") for n in gene_data.get_row_data().get_column("name")]
    },
    adt_subsets = {
        "igg": [n.startswith("IgG") for n in adt_data.get_row_data().get_column("name")]
    }
)

This returns ADT-specific results in the relevant fields, as well as a set of combined PCs for use in clustering, visualization, etc.

print(results.adt_size_factors)
## [0.79359408 0.79410332 0.89536413 ... 0.79207839 0.66492723 0.76847637]

print(results.combined_pca.combined)
## [[-9.97603155e+00 -1.04045057e+01 -1.26408576e+01 ... -1.29361354e+01
##   -1.09887392e+01 -1.08070608e+01]
##  [ 7.47726554e+00  6.77629373e+00  1.78091509e+00 ...  2.22256539e+00
##    5.96667219e+00  7.10437993e+00]
##  [-2.63898263e+00 -1.24485522e+00  5.51002546e+00 ...  5.21037673e+00
##   -5.54233035e+00 -3.38828724e+00]
##  ...
##  [-2.04699441e-01 -4.38991650e-01 -2.87170731e+00 ...  2.36527395e+00
##    7.05969255e-01 -2.46180209e-01]
##  [ 4.75688909e-01 -1.54557081e-01 -1.30053159e+00 ...  2.81492567e+00
##    1.21607502e+00 -3.12194853e-01]
##  [ 8.56575012e-02  8.74924626e-03 -7.17362957e-04 ...  1.65769854e-01
##    1.73927253e-01  5.04057044e-02]]

second_markers = results.adt_markers.to_biocframes(summaries=["min_rank"])[1]
second_markers.set_row_names(results.adt_row_names, in_place=True)
print(second_markers)
## BiocFrame with 17 rows and 6 columns
##                      mean           detected cohens_d_min_rank      auc_min_rank delta_mean_min_rank delta_detected_min_rank
##        <ndarray[float64]> <ndarray[float64]> <ndarray[uint32]> <ndarray[uint32]>   <ndarray[uint32]>       <ndarray[uint32]>
##    CD3  11.04397358391642                1.0                 1                 1                   1                       1
##   CD19  4.072383130863625                1.0                 4                 4                   4                       4
## CD45RA 10.481785289114054                1.0                 1                 1                   1                       1
##                       ...                ...               ...               ...                 ...                     ...
##  IgG2b 2.8690172565558263 0.9911190053285968                 6                 5                   6                       6
##  CD127  6.258223461814724                1.0                 2                 2                   2                       2
##   CD15  5.366264191077669                1.0                 4                 4                   4                       4

Customizing the analysis

Most parameters can be changed by modifying the relevant arguments in analyze(). 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_subsets = {
        "mito": is_mito
    },
    build_snn_graph_options = {
        "num_neighbors": 10
    },
    cluster_graph_options = {
        "multilevel_resolution": 2
    },
    run_pca_options = {
        "number": 15
    },
    run_tsne_options = {
        "perplexity": 25
    },
    run_umap_options = {
        "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:

counts = sce.assay(0)
qcmetrics = scranpy.compute_rna_qc_metrics(counts, subsets=is_mito)
thresholds = scranpy.suggest_rna_qc_thresholds(qcmetrics)
filter = scranpy.filter_rna_qc_metrics(thresholds, metrics)

import delayedarray # avoid an actual copy of the matrix.
filtered = delayedarray.DelayedArray(rna_x)[:,filter]

sf = scranpy.center_size_factors(qcmetrics.sum[filter])
normalized = scranpy.normalize_counts(filtered, sf)

vardf = scranpy.model_gene_variances(normalized)
hvgs = scranpy.choose_highly_variable_genes(vardf.residual)
pca = scranpy.run_pca(normalized[hvgs,:])

nn_out = scranpy.run_all_neighbor_steps(pca.components)
clusters = nn_out.cluster_graph.membership
markers = scranpy.score_markers(normalized, groups=clusters)

Check out analyze.py 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.2.2.tar.gz (93.1 kB view details)

Uploaded Source

Built Distributions

scranpy-0.2.2-cp313-cp313-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

scranpy-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (909.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

scranpy-0.2.2-cp313-cp313-macosx_11_0_arm64.whl (780.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

scranpy-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl (967.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

scranpy-0.2.2-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

scranpy-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (909.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

scranpy-0.2.2-cp312-cp312-macosx_11_0_arm64.whl (780.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

scranpy-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl (967.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

scranpy-0.2.2-cp311-cp311-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

scranpy-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (907.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

scranpy-0.2.2-cp311-cp311-macosx_11_0_arm64.whl (778.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

scranpy-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl (964.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

scranpy-0.2.2-cp310-cp310-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

scranpy-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (906.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

scranpy-0.2.2-cp310-cp310-macosx_11_0_arm64.whl (777.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

scranpy-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl (963.5 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

scranpy-0.2.2-cp39-cp39-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

scranpy-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (907.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

scranpy-0.2.2-cp39-cp39-macosx_11_0_arm64.whl (777.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

scranpy-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl (963.5 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: scranpy-0.2.2.tar.gz
  • Upload date:
  • Size: 93.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for scranpy-0.2.2.tar.gz
Algorithm Hash digest
SHA256 a67651e10c6261891b69e3db4765e8131e2592616c41a86a94f2bac510a4b4a2
MD5 a7759e6c9c984e018c02aa3b4d80835c
BLAKE2b-256 1223985604e7555fe86e48d1c300ae281323814a17958aa4ebe5a8751bfa0ebb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a7dec063f5bd1408a336a79472f9079a0d0867b3f5b4f9b547c73869e90e2c0f
MD5 7f22e58eef9f2fca4de70dd2ac587977
BLAKE2b-256 89c17ca43d3cfdde5cdd004e9d1e967aad036a470859aa77c51cae4857970789

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-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.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47c934f7e2a17e51e2c06e9d89d7df9f8bb5725799698ba36c9b197397653550
MD5 1a92e8c3a9e141ed8c98ab1ca4e65f09
BLAKE2b-256 f334c1dab663bd3e97d234d8dc895e25540de7bb0eb9f9ac3a13b23473fc1309

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_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.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 295427734232e6e01e2691109d9394de0e755ca0b82089118053af65806bec18
MD5 1dc25f4da5a07e5ad0ea0c3bc1410aed
BLAKE2b-256 9bc6325cd2aa8333b867146116f764fc0be841ad7d458c69a944e21a8dc336d5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8431822573979ee2f45f20baccf13a2b16967e9a4b3a1927f379c7d3696825f9
MD5 63ed4e0eed9ca0c595331a65ac9c98d7
BLAKE2b-256 365495c02f64cc168929fdcd53d5e9c00ac93a7e71f1e953778ff877db5c9e38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bf87a493684098031fee3f6eda02a6911610c509543667850dbedb42a48e69d1
MD5 c7acdf5554212087da7e31c7e0d3efcf
BLAKE2b-256 acbf40655f5a8d7b09c7c1290eaca286be5a30b0d06ec4f7e44675f1d0080ce0

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-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.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53fd1e9bb026c675ad1c98951daa3834287dd87956fc35ad0b2b11c7ae2cad25
MD5 e627d1650bbc7693264ea8ccbff5de3c
BLAKE2b-256 8ec909d89b564eec5a5176a791a4049f4a35ef5619e5b2e9ba0a94f0b3039fd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_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.2.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b2e3a2c8088c9b225589244b1237ab1c56cd9db4fe594923f8e064a0bb99108
MD5 bbc1eb078340aaf2297c38a9e4c41fdd
BLAKE2b-256 0327877c66a6f14d36e73a6628197a5d83e05a134033278427403ec92168eb14

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 34adf5483f17c03f42ef5e609c2d8a9c68bd14a4d985a95b8a9c808a8c05cc2e
MD5 f086e6ec57732d7cce8bca4b1bbb668c
BLAKE2b-256 9fb59c361fb8e6e80bc3114c2a2192f57109f11cb01864ad3876323efc246ce8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e0607af6e89cc0a3e53f151cfb0360c5d5fdb8af03e49dae960ec52abdb7f693
MD5 4389399bb817fcb7c3fec2d9c13bbbe7
BLAKE2b-256 df767c9cc58a6f2b70f55cacf295abd97da8c23c6f9237cd6c58d47b2293edd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-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.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b0badd85d7a0d66a5ae74c82e0568fd28b620cfb2eb39e51759f737378078af
MD5 9073f2c4bd6e0a06327f320d6742a1e7
BLAKE2b-256 53676664161b528070fde979fdb461ee4020ac1123d8752e012775d480c39901

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_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.2.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed4364238e2e75f24c0faaa85fb47ff0cb02a326294d8adabb821873a1dc773d
MD5 45f6b949e1086c46812caa21fd1873b6
BLAKE2b-256 813e2e25daece7dcd8cd499e212722e1cd0a263bd38cdcc94e8fc088e9474ffc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 89dbdef5d93e42474dc3e77549e99cf599823e7c58b126e90de813879bba88b1
MD5 c83a9bffa6976d01c944624622ebcb69
BLAKE2b-256 886671bda425b8f3c361ba1a35bffd307c6f1db638f33beb2312f5ba2af7e694

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fba18e09906ea98e5e78e1830cc94ccc442f1b63d340b1fd3365bb3462e02bbf
MD5 68e7dbfa5be26e9282ffce489f608a59
BLAKE2b-256 48a52a3b2ec15754c7b2a29c8616f02cd9f7ea30b16b6a66f37d324c8387c069

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-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.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c29a1d7a2aa510f34f80564983fc865700f1f3ec79044a722212f5dc6306d801
MD5 24cdc71c20e711b7b251a98be8db5e12
BLAKE2b-256 1ab57a121658bc03f3bb6c74eb0aafc57f0bf8bf0093cff2bde0d71ab4e0079a

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_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.2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2a42149a548e9698f7115194ca8c899115f3d85df3b56a5a65f2f4409e96277
MD5 0c7a02a1e9512b9f87fdb151962bc36c
BLAKE2b-256 e9a2d15b3789c78c5a04ad7a978fa55aa9dbaddbfe403efadb84ebd82d3ee835

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for scranpy-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9043e34c1d87a862e20998ebf81b55fefc8313b8d92545b44da9305841bf6bda
MD5 2d0fd1674fdb9be728d161de38488cd3
BLAKE2b-256 454006f6a13128f9df18dd70a6ce2a1106b22a791018251ccea59e2c59ed95f5

See more details on using hashes here.

Provenance

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

File details

Details for the file scranpy-0.2.2-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 40bdd612fd0e19dc0a2acbf4233ff9872c6d63926725816355c4934b9e344327
MD5 57be2e496dbf846f6590831083427d41
BLAKE2b-256 b82eaa2b30665b4155c4a89df35273bbe029cb5da98ec623a814a3f12f20fd31

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp39-cp39-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.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a70f03442535cd34531af2f5aa120fb62e938040742e42acf40ed51491adb01
MD5 d51f805fbcc2353e70d8cae7a322de42
BLAKE2b-256 9eb18bda18c8dda659f8fa307555c3e4fe557525f1befb848af434f864ebdb96

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_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.2.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b7addb1dace8ddafcc94d8da46fb012c1a73527c6f84bdc08425f3845af16737
MD5 92c0df22165b40d961d3019de22ea374
BLAKE2b-256 9feb600aff3b7ba8ec11ba7c0d290f046cab88a082928a23e4faaf6f8aa21a12

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp39-cp39-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.2.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for scranpy-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7679b946458bc08f14a4258599f33bc4e57afe976843d95a4b3f4153116d70d9
MD5 4b0c2667fcd6c18595374b7229f66dc7
BLAKE2b-256 1ecd0e03b52e3bdd8b093013b6af417f4e28cb40078d1fe0e64f48682bb43df4

See more details on using hashes here.

Provenance

The following attestation bundles were made for scranpy-0.2.2-cp39-cp39-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 Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page