{ "info": { "author": "Oren Ben-Kiki", "author_email": "oren@ben-kiki.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Software Development :: Libraries" ], "description": "Metacell - Single-cell RNA Sequencing Analysis\n==============================================\n\n.. image:: https://travis-ci.org/tanaylab/metacell.py.svg?branch=master\n :target: https://travis-ci.org/tanaylab/metacell.py\n :alt: Build Status\n\n.. image:: https://readthedocs.org/projects/metacellpy/badge/?version=latest\n :target: https://metacellpy.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThe metacell package implements the metacell algorithm for single-cell RNA sequencing (scRNA-seq)\ndata analysis.\n\nThe `original `_ metacell algorithm was\nimplemented in R. In contrast, the Python package described here implements an `improved\n` version, which uses improved internal algorithms and supports much larger data sets\n(millions of cells).\n\nMetacell Analysis\n-----------------\n\nNaively, scRNA_seq data is a set of cell profiles, where for each one, for each gene, we get a count\nof the mRNA molecules that existed in the cell for that gene. This serves as an indicator of how\n\"expressed\" or \"active\" the gene is.\n\nAs in any real world technology, the raw data may suffer from technical artifacts (counting the\nmolecules of two cells in one profile, counting the molecules from a ruptured cells, counting only\nthe molecules from the cell nucleus, etc.). This requires pruning the raw data to exclude such\nartifacts. TODO: Create view should consider these issues.\n\nThe current technology scRNA-seq data is also very sparse (typically <10%, sometimes even <5% of the\nRNA molecules are counted). This introduces large sampling variance on top of the original signal,\nwhich itself contains significant inherent biological noise.\n\nAnalyzing scRNA-seq data therefore requires processing the profiles in bulk. Classically, this has\nbeen done by directly clustering the cells using various methods.\n\nIn contrast, the metacell approach groups together profiles of the \"same\" biological state into\ngroups with the *minimal* number of profiles (~100) needed for computing robust statistics (in\nparticular, mean gene expression). Each such group is a single \"metacell\".\n\nBy summing profiles together, each metacell greatly reduces the sampling variance, and provides a\nmore robust estimation of some transcription state. In particular, a metacell is not a cell type\n(multiple metacells may belong to the same type), and is not a parametric model of the cell state.\n\nThe metacells should therefore be further analyzed using additional methods to classify cell types,\ndetect cell trajectories and/or lineage, build parametric models for cell behavior, etc. Using\nmetacells as input for such analysis techniques should benefit both from the more robust, less noisy\ninput; and from the (~100-fold) reduction in the number of profiles to analyze.\n\nAn obvious technique is to recursively group the metacells into larger groups, and investigate the\nresulting clustering hierarchy. Methods for further analysis of the data may choose to build upon\nthis readily available hierarchy (which is also provided by this package).\n\nUsage\n-----\n\nInstallation\n............\n\nGiven Python version 3.6 and above, run ``pip install --user metacell`` (or, ``sudo pip install\nmetacell`` if you have ``sudo`` privileges). This will install this package and two scripts:\n``metacell_flow`` and ``metacell_call``.\n\nThe metacell package is built using the `DynaMake `_ package.\nThe ``metacell_flow`` script is simply the ``dynamake`` script, pre-loaded with the metacell build\nsteps, and ``metacell_call`` is simply the ``dynacall`` script, pre-loaded with the metacell\ncomputation functions.\n\nImporting\n.........\n\nTo use the package, create a directory somewhere with a large amount of available space (for ~2M\ncells, metacell required up to 200GB of disk space). If using a servers cluster, on some shared file\nsystem, and provide a DynaMake configuration file with an appropriate ``run_prefix`` for\ndistributing jobs across the cluster; see the DynaMake documentation for details.\n\nCreate a ``raw`` sub-directory and download the raw_data_ into it. Then, run ``metacell_import`` to\nimport the gene and cell data into the fast-access format used by the metacell package. This is\nunfortunately a slow process (in particular, the delaning step). Luckily, you only need to do this\nonce.\n\nThis will create the following directories:\n\n``genes``\n Describes the genes used in the data.\n\n``cells``\n A COLLECTION_ profiles directory containing all the imported cells.\n\nGrouping\n........\n\nTODO: Running ``metacell_group``.\n\nTODO: ``excluded_genes_names.txt``, ``forbidden_genes_names.txt``.\n\nZoning\n......\n\nTODO: Running ``metacell_zone``.\n\nAnalysis\n........\n\nTODO: Running ``metacell_dash``.\n\nTODO: ``colors`` directory.\n\nDirectory Structure\n-------------------\n\nThe provided automated workflow uses the following directory structure. The specifics of each\ndirectory type are provided further below.\n\n``ROOT``\n A directory which is typically named after the data source (``PBMC``, ``MOCA``, ``HCA``, etc.).\n Will contain:\n\n ``raw``\n A directory containing the raw data from the data source. Should contain one or more:\n\n ``name``\n A directory containing 10X_ or MOCA_ data.\n\n ``name.h5``\n An HDF file containing HCA_ data.\n\n ``std``\n The first processing step will convert the ``raw`` data to the standard input format. The\n result will contain:\n\n ``name``\n A directory in the standard (STD_) format ready to be delaned.\n\n Creating the standard format directory is pretty fast. It typically requires either a simple\n copy or applying something like ``sed`` to fix minor formatting issues. For HCA files, it is\n just a matter of dumping the data into a textual format.\n\n ``delaned``\n The next processing step will split the input into distinct lanes. The result will contain:\n\n ``name``\n A directory for each of the standard format directories. This would be either a standard\n format directory, or will contain:\n\n ``lane``\n A directory in the standard format containing just the data for a single lane.\n\n When data contains multiple lanes, delaning is a painfully slow process as it needs to split\n the matrix market file, processing one line at a time (without any parallelization). It\n would have been much easier if the raw data was already split into lanes.\n\n ``genes``\n A directory containing fast access per-gene data (GENES_) extracted from the ``delaned``\n data.\n\n The extraction process first verifies this data is identical for all the ``delaned``\n directories. Then one of these directories is used to actually extract the data.\n This is very fast, as there are only ~30,000 genes to deal with.\n\n ``cells``\n A directory containing fast access per-gene-per-profile (COLLECTION_) data. Will contain:\n\n ``name``\n A directory for each of the ``delaned`` directories. This would either be a\n simple profiles batch (BATCH_), or a collection combining:\n\n ``lane``\n A profiles batch directory containing the data for a single lane.\n\n Conversion of the (delaned) textual data to the fast-access format isn't very fast, but this\n is offset by being able to run this conversion in parallel for each lane. It is therefore\n much less painful than delaning. Once conversion is done, the import process is complete and\n does not need to be repeated.\n\n ``views``\n This is where the metacells package performs its analysis, recursively grouping the cells\n into metacells. Should contain:\n\n ``name``\n Some view profiles container (VIEW_) based on the full ``cells`` profiles collection, to\n group. Typically such a view will exclude profiles with too-low total UMIs count, or\n that suffer from other technical issues (e.g. doublets). Genes may also be excluded.\n\n The main function of the metacell package is to recursively compute the groups for\n such a view (that is, extend it to become a GROUPED_ directory).\n\n.. _raw_data:\n\nRaw Data\n........\n\nThe formats which can be used as the raw input for metacell processing:\n\n.. _10X:\n\n**10X**\n A directory containing `10X Genomics `_ data. Should contain the\n files:\n\n ``matrix.mtx``\n Matrix market UMIs data.\n\n ``barcodes.tsv``\n The barcode of each profile (possibly with a ``-lane`` suffix).\n\n ``genes.tsv``\n The ensembl ID and name of each gene.\n\n.. _MOCA:\n\n**MOCA**\n A directory containing `Mouse Organogenesis Cell Atlas\n `_ data. Should contain the files:\n\n ``gene_count.txt``\n Matrix market UMIs data.\n\n ``cell_annotate.csv``\n Per-cell data (see list of expected fields in ``metacell/storage/moca_format.yaml``).\n\n ``gene_annotate.csv``\n Per-gene data (see list of expected fields in ``metacell/storage/moca_format.yaml``).\n\n.. _HCA:\n\n**HCA**\n A file containing `Human Cell Atlas `_ in HDF format with a\n `.h5`` suffix. Must contain a single top-level key with the sub-keys ``barcodes``, ``indptr``,\n ``genes``, ``indices`` and ``data``.\n\nThese formats are converted to a standard input format:\n\n.. _STD:\n\n**STD**\n A directory containing data in a standard metacell input format. Should contain the files:\n\n ``umis.mtx``\n Matrix market UMIs data.\n\n ``profiles.csv``\n Per-profile data.\n\n ``genes.csv``\n Per-gene data.\n\n ``format.yaml``\n A description of the fields of the CSV files.\n\nFast Access Data\n................\n\nFormats of data allowing fast access during the metacell processing.\n\n.. _GENES:\n\n**GENES**\n A directory containing per-gene data, accessed using the\n ``metacell.storage.genes.Genes`` class. Should contain the files:\n\n ``genes.yaml``\n General meta-data describing this set of genes. Should contain the keys ``organism``,\n ``genes_count`` and ``uuid``, which must be equal to the ``md5sum`` of the\n ``genes.name.txt`` file. This UUID uniquely identifies this set of genes.\n\n ``genes.*.txt``\n Per-gene string data. These should include ``genes.name.txt`` containing the\n (sorted, all-upper-case) gene names, and ``genes.ensembl.txt`` containing the\n `ensembl `_ identifier of each gene.\n\n ``genes.*.npy``\n Per-gene numeric data, if any.\n\n.. _CONTAINER:\n\n**CONTAINER**\n Either a **BATCH**, **COLLECTION**, or **VIEW** directory, providing access to\n per-gene-per-profile data for some genes and profiles using the\n ``metacell.storage.profiles.ProfilesContainer`` class.\n\n Each container directory contains at least the file:\n\n ``profiles.yaml``\n General meta-data describing this container of profiles. Should contain at least the keys:\n\n ``organism``\n The organism whose cells were sequenced (e.g. ``human`` or ``mouse``).\n ``genes_uuid``\n The UUID of the genes per profile.\n ``profiles_count``, ``genes_count``\n The number of profiles, and number of genes per profiles.\n ``profiles_kind``\n The kind of profiles (``cells``, ``metacells``, ``1_zones``, ``2_zones``, etc.).\n ``uuid``\n Should be equal to the ``md5sum`` of the ``matrix.umis.mmm`` or ``matrix.umis.npy``\n file. This UUID uniquely identifies this profiles batch.\n\n Additional keys may be specified depending on the container type.\n\n.. _BATCH:\n\n**BATCH**\n A directory containing per-gene-per-profile data for some closely related profiles (a single\n batch), accessed using the ``metacell.storage.profiles.ProfilesBatch`` class. Barcodes\n can be safely assumed to be unique within each batch, but not between multiple batches. When\n investigating batch effects, this is the smallest group of profiles for which these effects can\n be assumed to be the same. Should contain the additional files:\n\n ``gp.*.mmm``, ``gp.*.npy``\n Per-gene-per-profile data. The ``mmm`` format is a metacell-specific compressed sparse data\n format accessed using the ``metacell.matrices.MemoryMappedMatrix`` class. Each batch\n should contain ``gp.umis.mmm`` or ``gp.umis.npy``.\n\n Additional per-gene-per-profile data may exist, for example:\n\n ``gp.log_fold.npy``\n The log-fold-factor of the gene's UMIs fraction (out of the profile's total), compared\n to the gene's median UMIs fraction (in all the profiles). This serves as an estimate of\n how strong a marker the gene is for this specific profile. This should not be used\n for single cells.\n\n ``p.*.txt``\n Per-profile string data. Common data includes:\n\n ``p.barcode.txt``\n The unique (in this batch) per-profile barcode (without any lane suffix).\n\n ``p.name.txt``\n The unique (in this batch) per-profile string name, if any.\n\n ``p.batch.txt``, ``p.lane.txt``\n The name of the batch and the name of the lane (if any) per profile. These are the same\n for all profiles in the batch, but having these files is useful when collecting multiple\n batches to a single data set (see below).\n\n ``p.*.npy``\n Per-profile numeric data. Common data includes:\n\n ``p.total_umis.npy``\n The sum of the genes UMIs for each profile.\n\n ``p.max_log_fold.npy``\n The maximal fold factor of a gene in this profile.\n\n ``g.*.txt``, ``g.*.npy``\n Per-gene string and numeric data, specific for this profiles batch, if any. Common data\n includes:\n\n ``g.median_fraction.npy``\n The median fraction of the gene's UMIs out of the profile's UMIs. This is used as an\n estimate of the global gene expression. This should not be used for single cells.\n\n ``g.min_rank_log_fold.npy``\n The minimal rank of the gene's fold factor in some profile. That is, the lower the\n number, the stronger the marker the gene is for distinguishing between profiles. This is\n used to filter genes in heatmap visualizations. This should not be used for single\n cells.\n\n.. _VIEW:\n\n**VIEW**\n A directory containing a possibly restricted view of another profiles container accessed using\n the ``metacell.storage.profiles.ProfilesView`` class. The ``profiles.yaml`` file should\n contain the additional keys:\n\n ``base_uuid``\n The UUID of the base profiles container this is a view of.\n\n ``base_path``\n The path of the base profiles container this is a view of. If this is a relative path,\n it is relative to the view directory.\n\n The directory may contain the additional file(s):\n\n ``p.base_index.npy``\n If exist, contain the sorted indices of the base container profiles which are included in\n this view. Otherwise, the view contains all the base container profiles.\n\n ``g.base_index.npy``\n If exist, contain the sorted indices of the base container genes which are included in this\n view. Otherwise, the view contains all the base container genes.\n\n When accessing data of a view, if there exists a local file containing the data, it is used.\n Otherwise, if possible, the data of the base container is fetched and sliced to include only\n the relevant subset of profiles and/or genes. By default, data is assumed to be slicable.\n Non-slicable data is specified in\n ``metacell.storage.profiles.ProfilesView.GENES_DEPENDENT_DATA``\n and ``metacell.storage.profiles.ProfilesView.PROFILES_DEPENDENT_DATA``.\n\n.. _COLLECTION:\n\n**COLLECTION**\n A directory combining a collection of other profiles container directories into a single unified\n profiles container, accessed using the ``metacell.storage.profiles.ProfilesCollection``\n class. The ``profiles.yaml`` file should contain the additional key:\n\n ``combined``\n A list of mapping, one per combined profile container directories. Should contain the\n keys:\n\n ``name``\n The name of a sub-directory of the collection directory, containing the profiles\n container which is combined into the overall collection.\n\n ``uuid``\n The UUID identifying the combined profiles container.\n\n ``profiles_count``\n The number of profiles in the combined profiles container.\n\n For each listed ``name``, a sub-directory with that name must exist, and contain a profiles\n container. When accessing data of a collection, if there exists a local file containing the\n data, it is used. Otherwise (except for per-gene data), the data is combined from the data\n of all the collected sub-containers.\n\nGrouped Data\n............\n\nThe primary function of the metacell package is to group profiles together, in particular, to group\ncell profiles into metacells, metacells into zones, etc.\n\n.. _GROUPED:\n\n**GROUPED**\n Any profiles container directory can become \"grouped\" if it also contains the files:\n\n ``p.group_index.npy``\n The group index for each of the container's profiles. A negative value indicates the profile\n belongs to no group (is an \"outlier\").\n\n ``groups``\n A GROUPS_ profiles container for the computed groups.\n\n ``outliers``\n A profiles view containing just the outlier profiles (which are not included in any\n of the groups). Typically this would only hold ``p.base_index.npy`` in addition\n to the ``profiles.yaml``.\n\n ``level-tree``\n A hierarchy of TREE_ profiles (view) containers based on the computed groups. The level is\n that of the singleton top-level group that contains everything (at minimum ``1_zone``).\n\n ``tmp``\n Temporary files used to compute the groupings, but need not be used once it has been\n computed. The contents of this directory depends on whether we are grouping a few\n profiles or many profiles.\n\n If grouping a small number of profiles:\n\n ``selected``\n A view of the profiles container, including only the selected (\"feature\") genes.\n\n If grouping a large number of profiles, we can't directly compute the groups, since the\n basic algorithm has a complexity of O(N^2). Computation therefore must works through a\n divide-and-conquer algorithm. This requires different temporary files:\n\n ``phase-1``\n A directory containing the second phase's files.\n\n ``pile-index``\n A profiles view of a random subset of a restricted number of to-be-grouped profiles.\n To help in sorting file names, the indices are zero-padded so all have the same\n width (e.g. ``00, .., 10, 11, ...``). Each such pile is independently (directly)\n grouped.\n\n ``outliers-pile``\n This directory is a profiles view containing all profiles that were marked as an\n outlier in some indexed pile. It is also independently grouped. Unlike the indexed\n piles, this view may contain a large number of profiles so grouping it may require\n an intermediate step of its own.\n\n Rare \"types\" do not have enough profiles in each of the piles to form groups, so\n will be marked as outliers. In this outliers-only view, there might be enough of\n these rare profiles to form a proper group.\n\n ``grouped``\n A view of the grouped profiles container, with ``p.group_index.npy`` containing the\n combined group indices from all the phase-1 piles.\n\n ``groups``\n The intermediate grouping combines the groups from all the phase-1 piles, as well as the\n groups from the phase-1 outliers. This is the less-accurate grouping we will improve\n upon. To allow doing so, we compute the groups-of-groups, that is, we compute\n ``p.group_index.npy``. This may require recursion.\n\n ``outliers``\n A profiles view containing just the profiles which were marked as outliers when\n grouping the phase-1 outliers described above. That is, all the profiles which\n we tried to but failed to group in the first phase.\n\n ``phase-2``\n A directory containing the second phase's files. This is similar to the first phase's\n structure, with the following differences:\n\n - The profiles contained in each pile are not chosen randomly. Instead, they are the\n profiles contained in one of the computed intermediate groups-of-groups.\n\n - The outliers pile contains the phase-1 outliers in addition to the outliers of the\n phase-2 indexed piles. This allows very rare profile \"types\" a second chance at being\n grouped.\n\n - There are no ``grouped`` or ``groups`` directories; the results are written directly\n to the original (parent) grouped profiles container. These final groups are\n recursively grouped as long as there is a large number of profiles, as described\n above.\n\n.. _GROUPS:\n\n**GROUPS**\n A profiles container describing groups of profiles. The ``gp.umis.npy`` per-profile-per-gene\n UMIs count in this container will contain the sum of the per-profile-per-gene of each of the\n grouped profiles contained in each (group) profile.\n\n A groups profiles container has identical format to a normal profiles batch directory, except\n that its ``profiles.yaml`` file contains a ``grouped_profiles`` key with the (relative) path to\n the grouped profiles container (typically ``..``), and a ``grouped_uuid`` key with the UUID of\n the grouped profiles container. For convenience, ``mean_grouped_count`` and ``mean_cells_count``\n provide an estimate of the number of cells and profiles in each group.\n\n The ``profiles_kind`` of the groups container should be based on the grouped container profiles\n kind. In particular, groups of ``cells`` are called ``metacells``. Such groups are expected to\n contain cells of the \"same\" state.\n\n When grouping a large number of profiles, the ``groups`` directory might itself be grouped. This\n recursion continues as long as the total number of profiles is \"large\". The ``profiles_kind`` of\n higher level groups is named ``1_zones``, ``2_zones`` etc. Such groups contain profiles with a\n \"similar\", but not necessarily the \"same\" state.\n\n Finally, a groups container will hold the files ``p.grouped_count.npy`` with the number of\n profiles summed into each group, and ``p.cells_count.npy`` with the number of cells summed into\n each group. These two numbers are the same for metacells, but differ for zones.\n\n\n.. _TREE:\n\n**TREE**\n A tree directory is used to provide convenient views for exploring the hierarchy created by\n the computed groups. Each tree directory contains two special directories, containing\n some profiles and their groups, such that all these groups belong to one super-group.\n\n For example, a directory for a 1_zone will contain both a ``cells`` and a ``metacells`` view\n sub-directories. The metacells sub-directory will view all the metacells that belong to the\n specific 1_zone. The cells sub-directory will view all the cells grouped into any of these\n metacells.\n\n Similarly, a directory for a 2_zone will contain both a ``metacells`` profiles views\n sub-directory and a ``1_zones`` profiles views sub-directory. The 1_zones sub-directory will\n view all the 1_zones that belong to the specific 2_zone, and the metacells sub-directory will\n view all the metacells that grouped into any of these 1_zones.\n\n In addition, a tree directory for a 2_zone and above will include one sub-directory for each\n contained group (zone). For example, a 2_zone tree directory will contain several\n ``1_zone-index`` sub-directories, one per 1_zone which belongs to the 2_zone.\n\n Each profiles view directory in this hierarchy contains a \"reasonable\" number of closely related\n profiles, allowing for convenient and efficient analysis.\n\n The root directory of this hierarchy (named after its level and ending with ``-tree``) is just a\n tree directory of the singleton top-level group to which all the (grouped) cells belong. For\n example, a minimal hierarchy might look like this:\n\n ::\n\n 1_zone-tree\n metacells\n profiles.yaml # A view of the \"groups\" profiles container.\n p.base_index.npy\n ...\n cells\n profiles.yaml # A view of the original grouped cells.\n p.base_index.npy\n ...\n\n And a deeper tree (for a much larger amount of cells) might look like this:\n\n ::\n\n 3_zone-tree\n 2_zones\n profiles.yaml # A view of the \"groups/groups/groups\" container.\n p.base_index.npy\n ...\n 1_zones\n profiles.yaml # A view of the \"groups/groups\" container.\n p.base_index.npy\n ...\n 2_zone-00:\n 1_zones\n profiles.yaml\n p.base_index.npy\n ...\n metacells\n profiles.yaml\n p.base_index.npy\n ...\n 1_zone-00\n metacells\n profiles.yaml\n p.base_index.npy\n ...\n cells\n profiles.yaml\n p.base_index.npy\n ...\n 1_zone-01\n ...\n ...\n 2_zone-01:\n 1_zones\n profiles.yaml\n p.base_index.npy\n ...\n metacells\n profiles.yaml\n p.base_index.npy\n ...\n 1_zone-09\n metacells\n profiles.yaml\n p.base_index.npy\n ...\n cells\n profiles.yaml\n p.base_index.npy\n ...\n 1_zone-10\n ...\n ...", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/orenbenkiki/metacell.py.git", "keywords": "logging configuration", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "metacell", "package_url": "https://pypi.org/project/metacell/", "platform": "", "project_url": "https://pypi.org/project/metacell/", "project_urls": { "Homepage": "https://github.com/orenbenkiki/metacell.py.git" }, "release_url": "https://pypi.org/project/metacell/0.5.35/", "requires_dist": null, "requires_python": "", "summary": "Single-cell RNA Sequencing Analysis", "version": "0.5.35" }, "last_serial": 5988314, "releases": { "0.5.25": [ { "comment_text": "", "digests": { "md5": "7de3675e41464f943539b8bc84ead315", "sha256": "4bf8b61e39f9c5a65ba70f0bc59dec02bdc17f5d0820093d8efb3616a0aaf045" }, "downloads": -1, "filename": "metacell-0.5.25.tar.gz", "has_sig": false, "md5_digest": "7de3675e41464f943539b8bc84ead315", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 221677, "upload_time": "2019-10-02T16:40:29", "url": "https://files.pythonhosted.org/packages/06/92/fe4a46ccd7fe1ead02fae7853b3bdf0ecfbac4bc05f4f7a9a6ba8834c57a/metacell-0.5.25.tar.gz" } ], "0.5.35": [ { "comment_text": "", "digests": { "md5": "4ecfd4f6eba8827ee6dbd65d7c646b41", "sha256": "12d021404d9702fd4a308e981924ff6e68ea151abf28cc33caebcafc09f005a4" }, "downloads": -1, "filename": "metacell-0.5.35.tar.gz", "has_sig": false, "md5_digest": "4ecfd4f6eba8827ee6dbd65d7c646b41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 234472, "upload_time": "2019-10-17T08:13:22", "url": "https://files.pythonhosted.org/packages/b7/56/c803b34a0265236d7866b96a779092d7a0d2710d2c0016685c24c49111bc/metacell-0.5.35.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4ecfd4f6eba8827ee6dbd65d7c646b41", "sha256": "12d021404d9702fd4a308e981924ff6e68ea151abf28cc33caebcafc09f005a4" }, "downloads": -1, "filename": "metacell-0.5.35.tar.gz", "has_sig": false, "md5_digest": "4ecfd4f6eba8827ee6dbd65d7c646b41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 234472, "upload_time": "2019-10-17T08:13:22", "url": "https://files.pythonhosted.org/packages/b7/56/c803b34a0265236d7866b96a779092d7a0d2710d2c0016685c24c49111bc/metacell-0.5.35.tar.gz" } ] }