{ "info": { "author": "Andrew Riha", "author_email": "apriha@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: Healthcare Industry", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Utilities" ], "description": ".. image:: https://raw.githubusercontent.com/apriha/lineage/master/docs/images/lineage_banner.png\n\n|build| |codecov| |docs| |pypi| |python| |downloads| |license|\n\nlineage\n=======\n``lineage`` provides a framework for analyzing genotype (raw data) files from direct-to-consumer\n(DTC) DNA testing companies, primarily for the purposes of genetic genealogy.\n\nCapabilities\n------------\n- Compute centiMorgans (cMs) of shared DNA between individuals using the HapMap Phase II genetic map\n- Plot shared DNA between individuals\n- Determine genes shared between individuals (i.e., genes transcribed from shared DNA segments)\n- Find discordant SNPs between child and parent(s)\n- Read, write, merge, and remaps SNPs for an individual via the `snps `_ package\n\nSupported Genotype Files\n------------------------\n``lineage`` supports `VCF `_ files and\ngenotype files from the following DTC DNA testing companies:\n\n- `23andMe `_\n- `Ancestry `_\n- `Family Tree DNA `_\n- `MyHeritage `_\n\nDependencies\n------------\n``lineage`` requires `Python `_ 3.5+ and the following Python packages:\n\n- `numpy `_\n- `pandas `_\n- `matplotlib `_\n- `atomicwrites `_\n- `snps `_\n\nOn Linux systems, the following system-level installs may also be required::\n\n $ sudo apt-get install python3-tk\n $ sudo apt-get install gfortran\n $ sudo apt-get install python-dev\n $ sudo apt-get install python-devel\n $ sudo apt-get install python3.X-dev # (where X == Python minor version)\n\nInstallation\n------------\n``lineage`` is `available `_ on the\n`Python Package Index `_. Install ``lineage`` (and its required\nPython dependencies) via ``pip``::\n\n $ pip install lineage\n\nExamples\n--------\nInitialize the lineage Framework\n````````````````````````````````\nImport ``Lineage`` and instantiate a ``Lineage`` object:\n\n>>> from lineage import Lineage\n>>> l = Lineage()\n\nDownload Example Data\n`````````````````````\nLet's download some example data from `openSNP `_:\n\n>>> paths = l.download_example_datasets()\nDownloading resources/662.23andme.304.txt.gz\nDownloading resources/662.23andme.340.txt.gz\nDownloading resources/662.ftdna-illumina.341.csv.gz\nDownloading resources/663.23andme.305.txt.gz\nDownloading resources/4583.ftdna-illumina.3482.csv.gz\nDownloading resources/4584.ftdna-illumina.3483.csv.gz\n\nWe'll call these datasets ``User662``, ``User663``, ``User4583``, and ``User4584``.\n\nLoad Raw Data\n`````````````\nCreate an ``Individual`` in the context of the ``lineage`` framework to interact with the\n``User662`` dataset:\n\n>>> user662 = l.create_individual('User662', 'resources/662.ftdna-illumina.341.csv.gz')\nLoading resources/662.ftdna-illumina.341.csv.gz\n\nHere we created ``user662`` with the name ``User662`` and loaded a raw data file.\n\nRemap SNPs\n``````````\nOops! The data we just loaded is Build 36, but we want Build 37 since the other files in the\ndatasets are Build 37... Let's remap the SNPs:\n\n>>> user662.build\n36\n>>> chromosomes_remapped, chromosomes_not_remapped = user662.remap_snps(37)\nDownloading resources/NCBI36_GRCh37.tar.gz\n>>> user662.build\n37\n>>> user662.assembly\n'GRCh37'\n\nSNPs can be re-mapped between Build 36 (``NCBI36``), Build 37 (``GRCh37``), and Build 38\n(``GRCh38``).\n\nMerge Raw Data Files\n````````````````````\nThe dataset for ``User662`` consists of three raw data files from two different DNA testing\ncompanies. Let's load the remaining two files.\n\nAs the data gets added, it's compared to the existing data, and SNP position and genotype\ndiscrepancies are identified. (The discrepancy thresholds can be tuned via parameters.)\n\n>>> user662.snp_count\n708092\n>>> user662.load_snps(['resources/662.23andme.304.txt.gz', 'resources/662.23andme.340.txt.gz'],\n... discrepant_genotypes_threshold=300)\nLoading resources/662.23andme.304.txt.gz\n3 SNP positions were discrepant; keeping original positions\n8 SNP genotypes were discrepant; marking those as null\nLoading resources/662.23andme.340.txt.gz\n27 SNP positions were discrepant; keeping original positions\n156 SNP genotypes were discrepant; marking those as null\n>>> len(user662.discrepant_positions)\n30\n>>> user662.snp_count\n1006960\n\nSave SNPs\n`````````\nOk, so far we've remapped the SNPs to the same build and merged the SNPs from three files,\nidentifying discrepancies along the way. Let's save the merged dataset consisting of over 1M+\nSNPs to a CSV file:\n\n>>> saved_snps = user662.save_snps()\nSaving output/User662_GRCh37.csv\n\nAll `output files `_ are saved to the output\ndirectory.\n\nCompare Individuals\n```````````````````\nLet's create another ``Individual`` for the ``User663`` dataset:\n\n>>> user663 = l.create_individual('User663', 'resources/663.23andme.305.txt.gz')\nLoading resources/663.23andme.305.txt.gz\n\nNow we can perform some analysis between the ``User662`` and ``User663`` datasets.\n\nFind Discordant SNPs\n''''''''''''''''''''\nFirst, let's find discordant SNPs (i.e., SNP data that is not consistent with Mendelian\ninheritance):\n\n>>> discordant_snps = l.find_discordant_snps(user662, user663, save_output=True)\nSaving output/discordant_snps_User662_User663_GRCh37.csv\n\nThis method also returns a ``pandas.DataFrame``, and it can be inspected interactively at\nthe prompt, although the same output is available in the CSV file.\n\n>>> len(discordant_snps.loc[discordant_snps['chrom'] != 'MT'])\n37\n\nNot counting mtDNA SNPs, there are 37 discordant SNPs between these two datasets.\n\nFind Shared DNA\n'''''''''''''''\n``lineage`` uses the probabilistic recombination rates throughout the human genome from the\n`International HapMap Project `_ to\ncompute the shared DNA (in centiMorgans) between two individuals. Additionally, ``lineage``\ndenotes when the shared DNA is shared on either one or both chromosomes in a pair. For example,\nwhen siblings share a segment of DNA on both chromosomes, they inherited the same DNA from their\nmother and father for that segment.\n\nWith that background, let's find the shared DNA between the ``User662`` and ``User663`` datasets,\ncalculating the centiMorgans of shared DNA and plotting the results:\n\n>>> results = l.find_shared_dna([user662, user663], cM_threshold=0.75, snp_threshold=1100)\nDownloading resources/genetic_map_HapMapII_GRCh37.tar.gz\nDownloading resources/cytoBand_hg19.txt.gz\nSaving output/shared_dna_User662_User663.png\nSaving output/shared_dna_one_chrom_User662_User663_GRCh37.csv\n\nNotice that the centiMorgan and SNP thresholds for each DNA segment can be tuned. Additionally,\nnotice that two files were downloaded to facilitate the analysis and plotting - future analyses\nwill use the downloaded files instead of downloading the files again. Finally, notice that a list\nof individuals is passed to ``find_shared_dna``... This list can contain an arbitrary number of\nindividuals, and ``lineage`` will find shared DNA across all individuals in the list (i.e.,\nwhere all individuals share segments of DNA on either one or both chromosomes).\n\nOutput is returned as a dictionary with the following keys (``pandas.DataFrame`` and\n``pandas.Index`` items):\n\n>>> sorted(results.keys())\n['one_chrom_discrepant_snps', 'one_chrom_shared_dna', 'one_chrom_shared_genes', 'two_chrom_discrepant_snps', 'two_chrom_shared_dna', 'two_chrom_shared_genes']\n\nIn this example, there are 27 segments of shared DNA:\n\n>>> len(results['one_chrom_shared_dna'])\n27\n\nAlso, `output files `_ are\ncreated; these files are detailed in the documentation and their generation can be disabled with a\n``save_output=False`` argument. In this example, the output files consist of a CSV file that\ndetails the shared segments of DNA on one chromosome and a plot that illustrates the shared DNA:\n\n.. image:: https://raw.githubusercontent.com/apriha/lineage/master/docs/images/shared_dna_User662_User663.png\n\nFind Shared Genes\n'''''''''''''''''\nThe `Central Dogma of Molecular Biology `_\nstates that genetic information flows from DNA to mRNA to proteins: DNA is transcribed into\nmRNA, and mRNA is translated into a protein. It's more complicated than this (it's biology\nafter all), but generally, one mRNA produces one protein, and the mRNA / protein is considered a\ngene.\n\nTherefore, it would be interesting to understand not just what DNA is shared between individuals,\nbut what *genes* are shared between individuals *with the same variations*. In other words,\nwhat genes are producing the *same* proteins? [*]_ Since ``lineage`` can determine the shared DNA\nbetween individuals, it can use that information to determine what genes are also shared on\neither one or both chromosomes.\n\n.. [*] In theory, shared segments of DNA should be producing the same proteins, but there are many\n complexities, such as copy number variation (CNV), gene expression, etc.\n\nFor this example, let's create two more ``Individuals`` for the ``User4583`` and ``User4584``\ndatasets:\n\n>>> user4583 = l.create_individual('User4583', 'resources/4583.ftdna-illumina.3482.csv.gz')\nLoading resources/4583.ftdna-illumina.3482.csv.gz\n\n>>> user4584 = l.create_individual('User4584', 'resources/4584.ftdna-illumina.3483.csv.gz')\nLoading resources/4584.ftdna-illumina.3483.csv.gz\n\nNow let's find the shared genes:\n\n>>> results = l.find_shared_dna([user4583, user4584], shared_genes=True)\nDownloading resources/knownGene_hg19.txt.gz\nDownloading resources/kgXref_hg19.txt.gz\nSaving output/shared_dna_User4583_User4584.png\nSaving output/shared_dna_one_chrom_User4583_User4584_GRCh37.csv\nSaving output/shared_dna_two_chroms_User4583_User4584_GRCh37.csv\nSaving output/shared_genes_one_chrom_User4583_User4584_GRCh37.csv\nSaving output/shared_genes_two_chroms_User4583_User4584_GRCh37.csv\n\nThe plot that illustrates the shared DNA is shown below. Note that in addition to outputting the\nshared DNA segments on either one or both chromosomes, the shared genes on either one or both\nchromosomes are also output.\n\nIn this example, there are 15,976 shared genes on both chromosomes transcribed from 36 segments\nof shared DNA:\n\n>>> len(results['two_chrom_shared_genes'])\n15976\n>>> len(results['two_chrom_shared_dna'])\n36\n\n.. image:: https://raw.githubusercontent.com/apriha/lineage/master/docs/images/shared_dna_User4583_User4584.png\n\nDocumentation\n-------------\nDocumentation is available `here `_.\n\nAcknowledgements\n----------------\nThanks to Whit Athey, Ryan Dale, Binh Bui, Jeff Gill, Gopal Vashishtha,\n`CS50 `_, and `openSNP `_.\n\nLicense\n-------\nCopyright (C) 2016 Andrew Riha\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see .\n\n.. https://github.com/rtfd/readthedocs.org/blob/master/docs/badges.rst\n.. |build| image:: https://travis-ci.org/apriha/lineage.svg?branch=master\n :target: https://travis-ci.org/apriha/lineage\n.. |codecov| image:: https://codecov.io/gh/apriha/lineage/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/apriha/lineage\n.. |docs| image:: https://readthedocs.org/projects/lineage/badge/?version=latest\n :target: https://lineage.readthedocs.io/\n.. |pypi| image:: https://img.shields.io/pypi/v/lineage.svg\n :target: https://pypi.python.org/pypi/lineage\n.. |python| image:: https://img.shields.io/pypi/pyversions/lineage.svg\n :target: https://www.python.org\n.. |downloads| image:: https://pepy.tech/badge/lineage\n :target: https://pepy.tech/project/lineage\n.. |license| image:: https://img.shields.io/pypi/l/lineage.svg\n :target: https://github.com/apriha/lineage/blob/master/LICENSE.txt\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/apriha/lineage", "keywords": "dna genes genetics genealogy snps chromosomes genotype bioinformatics ancestry", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "lineage", "package_url": "https://pypi.org/project/lineage/", "platform": "any", "project_url": "https://pypi.org/project/lineage/", "project_urls": { "Changelog": "https://github.com/apriha/lineage/releases", "Documentation": "https://lineage.readthedocs.io", "Homepage": "https://github.com/apriha/lineage", "Issue Tracker": "https://github.com/apriha/lineage/issues" }, "release_url": "https://pypi.org/project/lineage/3.0.1/", "requires_dist": [ "numpy", "pandas", "matplotlib", "atomicwrites", "snps" ], "requires_python": ">=3.5", "summary": "tools for genetic genealogy and the analysis of consumer DNA test results", "version": "3.0.1" }, "last_serial": 5597623, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "fde8da3a93f7e9f371d069c6c463c6ac", "sha256": "a4c36d6c02694431cf339e44d9109679c7b1eaf9f66dbb826693617513b8d676" }, "downloads": -1, "filename": "lineage-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fde8da3a93f7e9f371d069c6c463c6ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37735, "upload_time": "2018-08-27T00:05:50", "url": "https://files.pythonhosted.org/packages/c4/68/58a039d56155e251e35dcaf73c2b52b5c204d6b0843541dc55a536493527/lineage-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32d3fd106b514f3d3e46f659e6b3573b", "sha256": "e14389c5a1b7a753d59c8c342df24749733e0571308f5fb08df6fbd0aacd880c" }, "downloads": -1, "filename": "lineage-1.0.tar.gz", "has_sig": false, "md5_digest": "32d3fd106b514f3d3e46f659e6b3573b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72063, "upload_time": "2018-08-27T00:05:53", "url": "https://files.pythonhosted.org/packages/55/24/2f8b80f2e25e7354af309bc2c7ca14896c5eb50e33d30aee94cd373a116e/lineage-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "4f6568fa71f861c75f38728de22fe848", "sha256": "3052dfd2321e1ee0f3f7a716782537d0be7d3b0254e7b31d5f9809683d6be52d" }, "downloads": -1, "filename": "lineage-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4f6568fa71f861c75f38728de22fe848", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33028, "upload_time": "2018-09-09T23:23:07", "url": "https://files.pythonhosted.org/packages/4b/59/92c861b5da6073ff8b03d8eb364920fc3cb88dbbfddb3fec5b81606c8cdc/lineage-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49d51f9126e671ce04010d6e0ace7d17", "sha256": "cf7e333e44bda89782f87fced91f206527dd5d338eee96e3d7ded8cd664c7e51" }, "downloads": -1, "filename": "lineage-1.0.1.tar.gz", "has_sig": false, "md5_digest": "49d51f9126e671ce04010d6e0ace7d17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66953, "upload_time": "2018-09-09T23:23:08", "url": "https://files.pythonhosted.org/packages/39/00/87a9374dd7f32bc79c0dcb3a87b27d8d052cff77b041a16ac129b0be2806/lineage-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "d252acc9905a40fe357d6a05f1196e1d", "sha256": "93bdd6505fd716b220890de24dcded896b53bfd10ffd23edc01c013800dffc90" }, "downloads": -1, "filename": "lineage-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d252acc9905a40fe357d6a05f1196e1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 50650, "upload_time": "2018-12-29T02:11:00", "url": "https://files.pythonhosted.org/packages/2f/6e/2a82fdfe0f1f0ac15238959c5e376c135eca7e8e85ff4b2c498fc3ae6db4/lineage-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f96ad71ecfbbf5cfeb7261167079159f", "sha256": "8538b7503c869bf75a86d756210cbcfc1620578ba12e1b69ccbf20586734ecfc" }, "downloads": -1, "filename": "lineage-1.0.2.tar.gz", "has_sig": false, "md5_digest": "f96ad71ecfbbf5cfeb7261167079159f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62847, "upload_time": "2018-12-29T02:11:01", "url": "https://files.pythonhosted.org/packages/bf/d2/5ff6dd09d5a3f55fec466c4187d490c4eee6ad4f6db4656f2c3068212870/lineage-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "5caec58767352a81ae5ee6e16298b5db", "sha256": "f40c7179cbe439a93083089fda14cd03b891e9df26949a14b69d9d770248b74f" }, "downloads": -1, "filename": "lineage-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5caec58767352a81ae5ee6e16298b5db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 50947, "upload_time": "2019-01-09T05:02:49", "url": "https://files.pythonhosted.org/packages/53/97/e19806c7bda2c225b8f7c78b269ce8a8c8797eaa6a5d75ef2fd7d7f0dd80/lineage-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a7c6423d4368d1e4d57e0ea87fce45d", "sha256": "d0bf0e1ae1a303d676b8086f76eb6badbb6bacb255d585723fe262f03c0b689d" }, "downloads": -1, "filename": "lineage-1.0.3.tar.gz", "has_sig": false, "md5_digest": "8a7c6423d4368d1e4d57e0ea87fce45d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63563, "upload_time": "2019-01-09T05:02:51", "url": "https://files.pythonhosted.org/packages/0e/1b/c25aff9354b569b07411f5b0ca11d6020811159a56b34ecad3799c4acfca/lineage-1.0.3.tar.gz" } ], "1.0a6": [ { "comment_text": "", "digests": { "md5": "d5938d690083e0d0e3d257db5894d934", "sha256": "36f31244b8fdb06634d1f579148adee2e8cc10b82c4ca2de5cfff34e39d7552b" }, "downloads": -1, "filename": "lineage-1.0a6-py3-none-any.whl", "has_sig": false, "md5_digest": "d5938d690083e0d0e3d257db5894d934", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6898, "upload_time": "2016-12-16T09:08:41", "url": "https://files.pythonhosted.org/packages/39/12/c78477d6cdb8897bc7651072b119ae0bc0ecb35d6f3c1d83ea57f5962e82/lineage-1.0a6-py3-none-any.whl" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "4e2975b8a28dac762db03f3e705885c3", "sha256": "8f0bfb3214bc7fe3c885b36d77f756d0eab4a6d45b44b9c593e8d0143817a0be" }, "downloads": -1, "filename": "lineage-1.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "4e2975b8a28dac762db03f3e705885c3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29936, "upload_time": "2017-09-27T07:39:24", "url": "https://files.pythonhosted.org/packages/1e/f8/87c8d54ecaff6a5ab65ad195cc780f25c570034250baa323b96ba46cab20/lineage-1.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c3c3ad0b546d81a25448a86e0d7d901", "sha256": "9979473e5ae797ecf7c8d9fdb2e15e0c291a17d64a03e7fb93044bf64db7fba9" }, "downloads": -1, "filename": "lineage-1.0b1.tar.gz", "has_sig": false, "md5_digest": "9c3c3ad0b546d81a25448a86e0d7d901", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41647, "upload_time": "2017-09-27T07:39:25", "url": "https://files.pythonhosted.org/packages/fe/c0/a0bdc3c3e7e1203e30436a296bb565cff1d7737f712ddb2f1337ab5b4951/lineage-1.0b1.tar.gz" } ], "1.0b2": [ { "comment_text": "", "digests": { "md5": "411d90ded28312dd8fd132e3fa150644", "sha256": "c56550966150a882e4449ee46c859fe4d8bc8ebdd932cf9450864f4b6b5cecc9" }, "downloads": -1, "filename": "lineage-1.0b2-py3-none-any.whl", "has_sig": false, "md5_digest": "411d90ded28312dd8fd132e3fa150644", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36210, "upload_time": "2018-01-29T06:56:32", "url": "https://files.pythonhosted.org/packages/5c/67/4cefd91f26c76ade92efe29bfa2ccf7c5451f0404efc5fd1ae916698e257/lineage-1.0b2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e12063956a1a35a5c54514d60b9861d6", "sha256": "691ded144b7bfe18eebe04eb914ef264028352a621b21f059e0613e7d5c7224a" }, "downloads": -1, "filename": "lineage-1.0b2.tar.gz", "has_sig": false, "md5_digest": "e12063956a1a35a5c54514d60b9861d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66129, "upload_time": "2018-01-29T06:56:33", "url": "https://files.pythonhosted.org/packages/2e/3c/9f6bbd67c0bc410e5c1dd096e8c31e2c01b45117e233ce87ceae8f47b7f7/lineage-1.0b2.tar.gz" } ], "1.0b3": [ { "comment_text": "", "digests": { "md5": "25a9d2bcfcd1a42ba6268e000744d25b", "sha256": "982bf92301590701076638348fe0fd229d6da2be66f5df5d86a2926ebd4d4816" }, "downloads": -1, "filename": "lineage-1.0b3-py3-none-any.whl", "has_sig": false, "md5_digest": "25a9d2bcfcd1a42ba6268e000744d25b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32371, "upload_time": "2018-04-17T03:31:32", "url": "https://files.pythonhosted.org/packages/a8/29/fdff9af65ede2072e6cdb32345f3fd7438e4c28816fa9fc54352f71c3c31/lineage-1.0b3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c86102f2ba76411c3c52806355ffc22", "sha256": "d3bae5a074b939de6c47f7b27fb178c942a41f424bf489ec61d202b377807e62" }, "downloads": -1, "filename": "lineage-1.0b3.tar.gz", "has_sig": false, "md5_digest": "3c86102f2ba76411c3c52806355ffc22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67887, "upload_time": "2018-04-17T03:31:33", "url": "https://files.pythonhosted.org/packages/89/5b/bbea1a9a098e674b30347ad9928c4e6445846cebdac0c8c76bfb4f90536d/lineage-1.0b3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d8e5216a80d353d2e82d7f706c61b5ac", "sha256": "8a5455f659c8eae60eb8ffd663f0b438c46cf5e1010aa901517517dc0d83a898" }, "downloads": -1, "filename": "lineage-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d8e5216a80d353d2e82d7f706c61b5ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51728, "upload_time": "2019-03-31T23:38:00", "url": "https://files.pythonhosted.org/packages/01/e9/fdba25bac9cf8e584cf31f914f44d5f08ae31ff8f72b0c4acf401430e3fd/lineage-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1e12ad20a6b55aefcb465f4a591a64e", "sha256": "e9eb4e326653349866876b3d255367889f8a0106e08acda3dcf477c2decd63b1" }, "downloads": -1, "filename": "lineage-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c1e12ad20a6b55aefcb465f4a591a64e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64524, "upload_time": "2019-03-31T23:38:02", "url": "https://files.pythonhosted.org/packages/8d/8d/76759817187063dce2f905d60f48110f0bde7ec3b10cf0d345a0a5d97b8e/lineage-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "afbdbb945f49b146b08932229c488af4", "sha256": "4120d0b55f48908d55c582e44bffe33580e6cb2d0ef79c04baeb24e99a47be79" }, "downloads": -1, "filename": "lineage-1.1.1.tar.gz", "has_sig": false, "md5_digest": "afbdbb945f49b146b08932229c488af4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 81830, "upload_time": "2019-04-30T05:10:22", "url": "https://files.pythonhosted.org/packages/bd/ba/46280d952d29bcdaee85130e9f231edf92987be02e73635296f0b21a03c5/lineage-1.1.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f8de2271278e655ad6404f063f64b672", "sha256": "61b950b3a97e727b2f96a51ca3aa010b1cae7f16c0fab49a9a91d26ee579cde1" }, "downloads": -1, "filename": "lineage-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f8de2271278e655ad6404f063f64b672", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 54452, "upload_time": "2019-05-06T08:24:53", "url": "https://files.pythonhosted.org/packages/22/32/76196c78f70716b99ec380553c297a902830633afc4a34224ac2166b1434/lineage-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ecf85d20b8021baa7e15c67be668bed", "sha256": "b61a4de8d6d1b056c7463538588c50d8e1b22347b4014070becbe56e10314342" }, "downloads": -1, "filename": "lineage-2.0.0.tar.gz", "has_sig": false, "md5_digest": "6ecf85d20b8021baa7e15c67be668bed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 86809, "upload_time": "2019-05-06T08:24:55", "url": "https://files.pythonhosted.org/packages/bb/04/1c43690d4074d3f3432b79adbdc405acfbac5eff5f67993abdfb6a108107/lineage-2.0.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "af4d83c985b29d30c31e1fde63f3855a", "sha256": "aadb1f5fba1736ed257b7f9744db02e4c5795876c8af090e10897a164f94cc86" }, "downloads": -1, "filename": "lineage-3.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "af4d83c985b29d30c31e1fde63f3855a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35000, "upload_time": "2019-06-16T19:30:15", "url": "https://files.pythonhosted.org/packages/b4/d5/c2ec421cd2f1ce984bf52e5a5271155cebcbf452e8321ca18e066751e888/lineage-3.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae1acbcbb1e5a4779b7f9a4b63e41605", "sha256": "8358c04739dd0a7b5ec5039513fb62e49278fc837b1297883a195c58f9098370" }, "downloads": -1, "filename": "lineage-3.0.0.tar.gz", "has_sig": false, "md5_digest": "ae1acbcbb1e5a4779b7f9a4b63e41605", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 62143, "upload_time": "2019-06-16T19:30:17", "url": "https://files.pythonhosted.org/packages/9d/86/76b7fd21fde5075b44753d025b67d72c70509f58850c4c63ff5dc23f7165/lineage-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "90c3bf4f4ee0fd36c0c9dc9667ccdb83", "sha256": "cce42f49a531d0d4b3c71c049a65fb73b5cf48124c558ea85434adb625c2242e" }, "downloads": -1, "filename": "lineage-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "90c3bf4f4ee0fd36c0c9dc9667ccdb83", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35098, "upload_time": "2019-07-29T04:14:27", "url": "https://files.pythonhosted.org/packages/e5/10/a170cffb6c3b84c125e37c0beb2daddb870971f079491a4ef478c4a25cea/lineage-3.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c462e31272347c4d8b335ff1ea87cdca", "sha256": "7452454062beee0a0d7c86dc6b2e0c43a958cf8e8dd8da6655b2714d18a6a4c0" }, "downloads": -1, "filename": "lineage-3.0.1.tar.gz", "has_sig": false, "md5_digest": "c462e31272347c4d8b335ff1ea87cdca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 62260, "upload_time": "2019-07-29T04:14:29", "url": "https://files.pythonhosted.org/packages/fd/6f/01acc8469c6076199e56937c3f0cbfa8f5102c90ce6d06afb2d1c31cd8e1/lineage-3.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "90c3bf4f4ee0fd36c0c9dc9667ccdb83", "sha256": "cce42f49a531d0d4b3c71c049a65fb73b5cf48124c558ea85434adb625c2242e" }, "downloads": -1, "filename": "lineage-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "90c3bf4f4ee0fd36c0c9dc9667ccdb83", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35098, "upload_time": "2019-07-29T04:14:27", "url": "https://files.pythonhosted.org/packages/e5/10/a170cffb6c3b84c125e37c0beb2daddb870971f079491a4ef478c4a25cea/lineage-3.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c462e31272347c4d8b335ff1ea87cdca", "sha256": "7452454062beee0a0d7c86dc6b2e0c43a958cf8e8dd8da6655b2714d18a6a4c0" }, "downloads": -1, "filename": "lineage-3.0.1.tar.gz", "has_sig": false, "md5_digest": "c462e31272347c4d8b335ff1ea87cdca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 62260, "upload_time": "2019-07-29T04:14:29", "url": "https://files.pythonhosted.org/packages/fd/6f/01acc8469c6076199e56937c3f0cbfa8f5102c90ce6d06afb2d1c31cd8e1/lineage-3.0.1.tar.gz" } ] }