bgen


Namebgen JSON
Version 1.7.3 PyPI version JSON
download
home_pagehttps://github.com/jeremymcrae/bgen
SummaryPackage for loading data from bgen files
upload_time2024-12-03 00:57:10
maintainerNone
docs_urlNone
authorJeremy McRae
requires_pythonNone
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ### Another bgen parser
![bgen](https://github.com/jeremymcrae/bgen/workflows/bgen/badge.svg)

This is a package for reading and writing [bgen files](https://www.well.ox.ac.uk/~gav/bgen_format).

This package uses cython to wrap c++ code for parsing bgen files. It's fairly
quick, it can parse genotypes from 500,000 individuals at ~300 variants per
second within a single python process (~450 million probabilities per second
with a 3GHz CPU). Decompressing the genotype probabilities can be the slow step,
zlib decompression takes 80% of the total time, using zstd compressed genotypes
is ~2X faster.

This has been optimized for UKBiobank bgen files (i.e. bgen version 1.2 with
zlib compressed 8-bit genotype probabilities, but the other bgen versions and
zstd compression have also been tested using example bgen files).

#### Install
`pip install bgen`

#### Usage
```python
from bgen import BgenReader, BgenWriter

bfile = BgenReader(BGEN_PATH)
rsids = bfile.rsids()

# select a variant by indexing
var = bfile[1000]

# pull out genotype probabilities
probs = var.probabilities  # returns 2D numpy array
dosage = var.minor_allele_dosage  # returns 1D numpy array for biallelic variant

# iterate through every variant in the file
with BgenReader(BGEN_PATH, delay_parsing=True) as bfile:
  for var in bfile:
      dosage = var.minor_allele_dosage

# get all variants in a genomic region
variants = bfile.fetch('21', 10000, 5000000)

# or for writing bgen files
import numpy as np
from bgen import BgenWriter

geno = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).astype(np.float64)
with BgenWriter(BGEN_PATH, n_samples=3) as bfile:
  bfile.add_variant(varid='var1', rsid='rs1', chrom='chr1', pos=1,
                    alleles=['A', 'G'], genotypes=geno)
```

#### API documentation

``` py
class BgenReader(path, sample_path='', delay_parsing=False)
    # opens a bgen file. If a bgenix index exists for the file, the index file
    # will be opened automatically for quicker access of specific variants.
    Arguments:
      path: path to bgen file
      sample_path: optional path to sample file. Samples will be given integer IDs
          if sample file is not given and sample IDs not found in the bgen file
      delay_parsing: True/False option to allow for not loading all variants into
          memory when the BgenFile is opened. This can save time when iterating
          across variants in the file
  
  Attributes:
    samples: list of sample IDs
    header: BgenHeader with info about the bgen version and compression.
  
  Methods:
    slicing: BgenVars can be accessed by slicing the BgenFile e.g. bfile[1000]
    iteration: variants in a BgenFile can be looped over e.g. for x in bfile: print(x)
    fetch(chrom, start=None, stop=None): get all variants within a genomic region
    drop_variants(list[int]): drops variants by index from being used in analyses
    with_rsid(rsid): returns list of BgenVars with given rsid
    at_position(pos): returns list of BgenVars at a given position
    varids(): returns list of varids for variants in the bgen file.
    rsids(): returns list of rsids for variants in the bgen file.
    chroms(): returns list of chromosomes for variants in the bgen file.
    positions(): returns list of positions for variants in the bgen file.

class BgenVar(handle, offset, layout, compression, n_samples):
  # Note: this isn't called directly, but instead returned from BgenFile methods
  Attributes:
    varid: ID for variant
    rsid: reference SNP ID for variant
    chrom: chromosome variant is on
    pos: nucleotide position variant is at
    alleles: list of alleles for variant
    is_phased: True/False for whether variant has phased genotype data
    ploidy: list of ploidy for each sample. Samples are ordered as per BgenFile.samples
    minor_allele: the least common allele (for biallelic variants)
    minor_allele_dosage: 1D numpy array of minor allele dosages for each sample
    alt_dosage: 1D numpy array of alt allele dosages for each sample
    probabilities:  2D numpy array of genotype probabilities, one sample per row
      These are most likely for biallelic diploid variants. In that scenario
      unphased probabilities have three columns, for homozygous first allele 
      (AA), heterozygous (Aa), homozygous second allele (aa).
      In contrast, phased probabilities (for a biallelic diploid variant) would
      have four columns, first two for haplotype 1 (hap1-allele1, hap1-allele2), 
      last two for haplotype 2 (hap2-allele1, hap2-allele2).
  
  BgenVars can be pickled e.g. pickle.dumps(var)


class BgenWriter(path, n_samples, samples=[], compression='zstd' layout=2, metadata=None)
    # opens a bgen file to write variants to. Automatically makes a bgenix index file
    Arguments:
      path: path to write data to
      n_samples: number of samples that you have data for
      samples: list of sample IDs (same length as n_samples)
      compression: compression type: None, 'zstd', or 'zlib' (default='zstd')
      layout: bgen layout format (default=2)
      metadata: any additional metadata you want o include in the file (as str)
    
    Methods:
      add_variant_direct(variant)
        Arguments:
            variant: BgenVar, to be directly copied from one begn file to 
                another. This can be done when the new bgen file is for the same
                set of samples as the one being read from. This is much faster
                due to not having to decode and re-encode the genotype data.
      add_variant(varid, rsid, chrom, pos, alleles, genotypes, ploidy=2, 
                  phased=False, bit_depth=8)
        Arguments:
            varid: variant ID e.g. 'var1'
            rsid: reference SNP ID e.g. 'rs1'
            chrom: chromosome the variant is on e.g 'chr1'
            pos: nucleotide position of the variant e.g. 100
            alleles: list of allele strings e.g. ['A', 'C']
            genotypes: numpy array of genotype probabilities, ordered as per the
                bgen samples e.g. np.array([[0, 0, 1], [0.5, 0.5, 0]])
            ploidy: ploidy state, either as integer to indicate constant ploidy
                (e.g. 2), or numpy array of ploidy values per sample, e.g. np.array([1, 2, 2])
            phased: whether the genotypes are for phased data or not (default=False)
            bit_depth: how many bits to store each genotype as (1-32, default=8)

```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/jeremymcrae/bgen",
    "name": "bgen",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "Jeremy McRae",
    "author_email": "jmcrae@illumina.com",
    "download_url": "https://files.pythonhosted.org/packages/b8/23/77a5461b6d57e2a3542c5874a7a65a271546ccbfea95d419c03e2e19d2a7/bgen-1.7.3.tar.gz",
    "platform": null,
    "description": "### Another bgen parser\n![bgen](https://github.com/jeremymcrae/bgen/workflows/bgen/badge.svg)\n\nThis is a package for reading and writing [bgen files](https://www.well.ox.ac.uk/~gav/bgen_format).\n\nThis package uses cython to wrap c++ code for parsing bgen files. It's fairly\nquick, it can parse genotypes from 500,000 individuals at ~300 variants per\nsecond within a single python process (~450 million probabilities per second\nwith a 3GHz CPU). Decompressing the genotype probabilities can be the slow step,\nzlib decompression takes 80% of the total time, using zstd compressed genotypes\nis ~2X faster.\n\nThis has been optimized for UKBiobank bgen files (i.e. bgen version 1.2 with\nzlib compressed 8-bit genotype probabilities, but the other bgen versions and\nzstd compression have also been tested using example bgen files).\n\n#### Install\n`pip install bgen`\n\n#### Usage\n```python\nfrom bgen import BgenReader, BgenWriter\n\nbfile = BgenReader(BGEN_PATH)\nrsids = bfile.rsids()\n\n# select a variant by indexing\nvar = bfile[1000]\n\n# pull out genotype probabilities\nprobs = var.probabilities  # returns 2D numpy array\ndosage = var.minor_allele_dosage  # returns 1D numpy array for biallelic variant\n\n# iterate through every variant in the file\nwith BgenReader(BGEN_PATH, delay_parsing=True) as bfile:\n  for var in bfile:\n      dosage = var.minor_allele_dosage\n\n# get all variants in a genomic region\nvariants = bfile.fetch('21', 10000, 5000000)\n\n# or for writing bgen files\nimport numpy as np\nfrom bgen import BgenWriter\n\ngeno = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).astype(np.float64)\nwith BgenWriter(BGEN_PATH, n_samples=3) as bfile:\n  bfile.add_variant(varid='var1', rsid='rs1', chrom='chr1', pos=1,\n                    alleles=['A', 'G'], genotypes=geno)\n```\n\n#### API documentation\n\n``` py\nclass BgenReader(path, sample_path='', delay_parsing=False)\n    # opens a bgen file. If a bgenix index exists for the file, the index file\n    # will be opened automatically for quicker access of specific variants.\n    Arguments:\n      path: path to bgen file\n      sample_path: optional path to sample file. Samples will be given integer IDs\n          if sample file is not given and sample IDs not found in the bgen file\n      delay_parsing: True/False option to allow for not loading all variants into\n          memory when the BgenFile is opened. This can save time when iterating\n          across variants in the file\n  \n  Attributes:\n    samples: list of sample IDs\n    header: BgenHeader with info about the bgen version and compression.\n  \n  Methods:\n    slicing: BgenVars can be accessed by slicing the BgenFile e.g. bfile[1000]\n    iteration: variants in a BgenFile can be looped over e.g. for x in bfile: print(x)\n    fetch(chrom, start=None, stop=None): get all variants within a genomic region\n    drop_variants(list[int]): drops variants by index from being used in analyses\n    with_rsid(rsid): returns list of BgenVars with given rsid\n    at_position(pos): returns list of BgenVars at a given position\n    varids(): returns list of varids for variants in the bgen file.\n    rsids(): returns list of rsids for variants in the bgen file.\n    chroms(): returns list of chromosomes for variants in the bgen file.\n    positions(): returns list of positions for variants in the bgen file.\n\nclass BgenVar(handle, offset, layout, compression, n_samples):\n  # Note: this isn't called directly, but instead returned from BgenFile methods\n  Attributes:\n    varid: ID for variant\n    rsid: reference SNP ID for variant\n    chrom: chromosome variant is on\n    pos: nucleotide position variant is at\n    alleles: list of alleles for variant\n    is_phased: True/False for whether variant has phased genotype data\n    ploidy: list of ploidy for each sample. Samples are ordered as per BgenFile.samples\n    minor_allele: the least common allele (for biallelic variants)\n    minor_allele_dosage: 1D numpy array of minor allele dosages for each sample\n    alt_dosage: 1D numpy array of alt allele dosages for each sample\n    probabilities:  2D numpy array of genotype probabilities, one sample per row\n      These are most likely for biallelic diploid variants. In that scenario\n      unphased probabilities have three columns, for homozygous first allele \n      (AA), heterozygous (Aa), homozygous second allele (aa).\n      In contrast, phased probabilities (for a biallelic diploid variant) would\n      have four columns, first two for haplotype 1 (hap1-allele1, hap1-allele2), \n      last two for haplotype 2 (hap2-allele1, hap2-allele2).\n  \n  BgenVars can be pickled e.g. pickle.dumps(var)\n\n\nclass BgenWriter(path, n_samples, samples=[], compression='zstd' layout=2, metadata=None)\n    # opens a bgen file to write variants to. Automatically makes a bgenix index file\n    Arguments:\n      path: path to write data to\n      n_samples: number of samples that you have data for\n      samples: list of sample IDs (same length as n_samples)\n      compression: compression type: None, 'zstd', or 'zlib' (default='zstd')\n      layout: bgen layout format (default=2)\n      metadata: any additional metadata you want o include in the file (as str)\n    \n    Methods:\n      add_variant_direct(variant)\n        Arguments:\n            variant: BgenVar, to be directly copied from one begn file to \n                another. This can be done when the new bgen file is for the same\n                set of samples as the one being read from. This is much faster\n                due to not having to decode and re-encode the genotype data.\n      add_variant(varid, rsid, chrom, pos, alleles, genotypes, ploidy=2, \n                  phased=False, bit_depth=8)\n        Arguments:\n            varid: variant ID e.g. 'var1'\n            rsid: reference SNP ID e.g. 'rs1'\n            chrom: chromosome the variant is on e.g 'chr1'\n            pos: nucleotide position of the variant e.g. 100\n            alleles: list of allele strings e.g. ['A', 'C']\n            genotypes: numpy array of genotype probabilities, ordered as per the\n                bgen samples e.g. np.array([[0, 0, 1], [0.5, 0.5, 0]])\n            ploidy: ploidy state, either as integer to indicate constant ploidy\n                (e.g. 2), or numpy array of ploidy values per sample, e.g. np.array([1, 2, 2])\n            phased: whether the genotypes are for phased data or not (default=False)\n            bit_depth: how many bits to store each genotype as (1-32, default=8)\n\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Package for loading data from bgen files",
    "version": "1.7.3",
    "project_urls": {
        "Homepage": "https://github.com/jeremymcrae/bgen"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "32b8848a83ea0bcd015ec1b40750463c8ac506767a06617e7526e0eac97ebd57",
                "md5": "a862c41a3cceddfb05ff8f10506a3870",
                "sha256": "7aa40eaef3ea2f1245f9599f59e81e38c8d9763033cecaf936b35d5141a5db61"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a862c41a3cceddfb05ff8f10506a3870",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 867956,
            "upload_time": "2024-12-03T00:56:21",
            "upload_time_iso_8601": "2024-12-03T00:56:21.307717Z",
            "url": "https://files.pythonhosted.org/packages/32/b8/848a83ea0bcd015ec1b40750463c8ac506767a06617e7526e0eac97ebd57/bgen-1.7.3-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ebd4181925561b49f1d59958b26bc7b7d60347a5e815caf75ad7cd3bd028805f",
                "md5": "20a9dea930dc6aea0bf70b5ae16a1076",
                "sha256": "a3547643cb3cdef346584a4cebb580c82a84b0a7c907119a521f9b670af53793"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "20a9dea930dc6aea0bf70b5ae16a1076",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 2580901,
            "upload_time": "2024-12-03T00:56:23",
            "upload_time_iso_8601": "2024-12-03T00:56:23.749924Z",
            "url": "https://files.pythonhosted.org/packages/eb/d4/181925561b49f1d59958b26bc7b7d60347a5e815caf75ad7cd3bd028805f/bgen-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f648a04a3b25da7c787689b8f2c07bf834dd6dbfa8c14806a866e2e12d45e468",
                "md5": "d69649dc59301ea9df23d89c93f5d3b9",
                "sha256": "dd3c96ad2a6afe60ee14e1a8ca161238d1a5208edb56a1bb529be6889d04a7b8"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d69649dc59301ea9df23d89c93f5d3b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 3625243,
            "upload_time": "2024-12-03T00:56:25",
            "upload_time_iso_8601": "2024-12-03T00:56:25.078816Z",
            "url": "https://files.pythonhosted.org/packages/f6/48/a04a3b25da7c787689b8f2c07bf834dd6dbfa8c14806a866e2e12d45e468/bgen-1.7.3-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9b3ed99d21760f7205ffb0bbdc5b952e5a78b598f22dcddcbdcfa733426f4f79",
                "md5": "326179be953d80e483f273957f4f8bae",
                "sha256": "3b4b58284421a9f3aaa259ae62fd4710b852f13e42d23d84f7cb255e587b9e56"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "326179be953d80e483f273957f4f8bae",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 445133,
            "upload_time": "2024-12-03T00:56:27",
            "upload_time_iso_8601": "2024-12-03T00:56:27.158553Z",
            "url": "https://files.pythonhosted.org/packages/9b/3e/d99d21760f7205ffb0bbdc5b952e5a78b598f22dcddcbdcfa733426f4f79/bgen-1.7.3-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0df45fa5706d61fc4317f0ec92dcbabe62a72698257709f0658ed3e306250fe9",
                "md5": "5eff3a7c6989c6414504fd9ec418289d",
                "sha256": "5fedb8e0764910b15d821aa2a0bcc6ad5ccee16c63ffe8046bb41b43a749451e"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5eff3a7c6989c6414504fd9ec418289d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 497053,
            "upload_time": "2024-12-03T00:56:28",
            "upload_time_iso_8601": "2024-12-03T00:56:28.977816Z",
            "url": "https://files.pythonhosted.org/packages/0d/f4/5fa5706d61fc4317f0ec92dcbabe62a72698257709f0658ed3e306250fe9/bgen-1.7.3-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7dc059e4337ea04dc4c1cf69506b4f05a9eba271b797b4319fc44c5e648a1d54",
                "md5": "21d504802c39497f0ac115591ee21ca9",
                "sha256": "26bceb2746cc40785e33812044439c2c1b9d697d6d2658a3fba6115675240420"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "21d504802c39497f0ac115591ee21ca9",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 868291,
            "upload_time": "2024-12-03T00:56:30",
            "upload_time_iso_8601": "2024-12-03T00:56:30.797898Z",
            "url": "https://files.pythonhosted.org/packages/7d/c0/59e4337ea04dc4c1cf69506b4f05a9eba271b797b4319fc44c5e648a1d54/bgen-1.7.3-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "59029c5261f41a7b99e7c57c3d6e7ae55ebc04ca222024861d43751b5ce4c7d2",
                "md5": "752460f92cc941f3a57e05f3f3de8757",
                "sha256": "acab3611b6ea5f180fefd7d2bfbdd51970052236fc875fc58d6ea785feabd3ca"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "752460f92cc941f3a57e05f3f3de8757",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 2661846,
            "upload_time": "2024-12-03T00:56:32",
            "upload_time_iso_8601": "2024-12-03T00:56:32.756236Z",
            "url": "https://files.pythonhosted.org/packages/59/02/9c5261f41a7b99e7c57c3d6e7ae55ebc04ca222024861d43751b5ce4c7d2/bgen-1.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cab50cc930b54ea3ffdfab62d6c79ea7fada5a1f14427337222c97a1d14086f2",
                "md5": "80829cf20d3ebcadaf70f8701a4677e0",
                "sha256": "3707e1205998430e3e60bbcd7da7a9593a5b2b88e71ab96afa96a990b933ad03"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "80829cf20d3ebcadaf70f8701a4677e0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 3697557,
            "upload_time": "2024-12-03T00:56:34",
            "upload_time_iso_8601": "2024-12-03T00:56:34.777201Z",
            "url": "https://files.pythonhosted.org/packages/ca/b5/0cc930b54ea3ffdfab62d6c79ea7fada5a1f14427337222c97a1d14086f2/bgen-1.7.3-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72463a1b2effeacd84c267ad85a05c939b8c8050e04a0af55252362c484d7f7e",
                "md5": "e41ceafa75c48fc7b40b82fee215fbc8",
                "sha256": "0d633038d13a515f7c975961da4026de81129914590e43bb2a66f073c7788d4e"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "e41ceafa75c48fc7b40b82fee215fbc8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 444031,
            "upload_time": "2024-12-03T00:56:36",
            "upload_time_iso_8601": "2024-12-03T00:56:36.029542Z",
            "url": "https://files.pythonhosted.org/packages/72/46/3a1b2effeacd84c267ad85a05c939b8c8050e04a0af55252362c484d7f7e/bgen-1.7.3-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ab84e39def71482bbc0ea9ce6ac4fcdee9e57a5c25d8c04dc98d1ecf7d870205",
                "md5": "77f2f7577850031f45eb78544aa327ce",
                "sha256": "e2293b74871c7fb3a2c6bc4545e86ada0e0db6cd6cf66d159b7eb4c5922146ca"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "77f2f7577850031f45eb78544aa327ce",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 497257,
            "upload_time": "2024-12-03T00:56:37",
            "upload_time_iso_8601": "2024-12-03T00:56:37.999451Z",
            "url": "https://files.pythonhosted.org/packages/ab/84/e39def71482bbc0ea9ce6ac4fcdee9e57a5c25d8c04dc98d1ecf7d870205/bgen-1.7.3-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "27a923c10dd703bb050732a1d5fe7cffafca8e0dcd41c5fbcb39e769cfff99d7",
                "md5": "11ccc29d3e706c7aeb79ed07576a01d7",
                "sha256": "0e98dffbabe2b5aff5289d59bdacb99e96aeb79908df2257cfda7d1cdf65fc73"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "11ccc29d3e706c7aeb79ed07576a01d7",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 868782,
            "upload_time": "2024-12-03T00:56:39",
            "upload_time_iso_8601": "2024-12-03T00:56:39.990668Z",
            "url": "https://files.pythonhosted.org/packages/27/a9/23c10dd703bb050732a1d5fe7cffafca8e0dcd41c5fbcb39e769cfff99d7/bgen-1.7.3-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c2a4bd27e8254570a5db6126b0fde8a4dea5eb0cb4b1a03285b29120adc70c36",
                "md5": "7e77528d8cd061ca6c76393fb78e9b45",
                "sha256": "42939a272ac0f59d2c4dc8bcb707fb4aa5d08331b54406049e7922887bd4ab1f"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7e77528d8cd061ca6c76393fb78e9b45",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 2752998,
            "upload_time": "2024-12-03T00:56:41",
            "upload_time_iso_8601": "2024-12-03T00:56:41.304094Z",
            "url": "https://files.pythonhosted.org/packages/c2/a4/bd27e8254570a5db6126b0fde8a4dea5eb0cb4b1a03285b29120adc70c36/bgen-1.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cc0056f8473a39805b35c3752d7e46378b693b3f5c82ff35b126e06ba7c52b15",
                "md5": "f646b1edd7b501b9f23efdf23157b1b9",
                "sha256": "2addc17b31573a7c0a5d5879487ecf71490f5d5fd664a580e9884ea509eeda06"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f646b1edd7b501b9f23efdf23157b1b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 3778518,
            "upload_time": "2024-12-03T00:56:43",
            "upload_time_iso_8601": "2024-12-03T00:56:43.319285Z",
            "url": "https://files.pythonhosted.org/packages/cc/00/56f8473a39805b35c3752d7e46378b693b3f5c82ff35b126e06ba7c52b15/bgen-1.7.3-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f667df139ae594da7d3446edd5c56b835a521eda7b229bc71f3539b66a6da23",
                "md5": "8c588f52474bbc531801e5ae49463d2e",
                "sha256": "082b1ea4d0b67767d555c83653f2c127813de8dd78ae3975c0eaffe0ce5d0819"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "8c588f52474bbc531801e5ae49463d2e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 444678,
            "upload_time": "2024-12-03T00:56:44",
            "upload_time_iso_8601": "2024-12-03T00:56:44.685329Z",
            "url": "https://files.pythonhosted.org/packages/3f/66/7df139ae594da7d3446edd5c56b835a521eda7b229bc71f3539b66a6da23/bgen-1.7.3-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b6f53e0cd31e807e2082001e304fe59fc17e08858940e8d37de1a342b8e35e3",
                "md5": "36b2385180348e60efbc9deedcce4474",
                "sha256": "0c19c1e2b4da939d3a989ea87490e9e20fcff6b3e09c08139148f1c0a53a98bb"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "36b2385180348e60efbc9deedcce4474",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 496827,
            "upload_time": "2024-12-03T00:56:45",
            "upload_time_iso_8601": "2024-12-03T00:56:45.854962Z",
            "url": "https://files.pythonhosted.org/packages/4b/6f/53e0cd31e807e2082001e304fe59fc17e08858940e8d37de1a342b8e35e3/bgen-1.7.3-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0ca5b33c2bf0ac9d428d267c1ee7ba8dbb14c31071231d2931be1fda82e82f1f",
                "md5": "1f31f6c822a9a9964158d84d130ff66e",
                "sha256": "aa9ebbcd8fa883fd6409b00db04594960c4f49e21c78b23197325353fe08c6f7"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1f31f6c822a9a9964158d84d130ff66e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": null,
            "size": 866721,
            "upload_time": "2024-12-03T00:56:47",
            "upload_time_iso_8601": "2024-12-03T00:56:47.059680Z",
            "url": "https://files.pythonhosted.org/packages/0c/a5/b33c2bf0ac9d428d267c1ee7ba8dbb14c31071231d2931be1fda82e82f1f/bgen-1.7.3-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "221d230b8007797ebe782176255694e11541c3a41239797d0f757ac77d97d2a6",
                "md5": "f5c7a64fa73fdb8f93e848796cd424b5",
                "sha256": "a9ab81e03c573c27f49406c5c427ac581d794626ca6a8021be17e85c13d3bb0f"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f5c7a64fa73fdb8f93e848796cd424b5",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": null,
            "size": 2732390,
            "upload_time": "2024-12-03T00:56:48",
            "upload_time_iso_8601": "2024-12-03T00:56:48.239054Z",
            "url": "https://files.pythonhosted.org/packages/22/1d/230b8007797ebe782176255694e11541c3a41239797d0f757ac77d97d2a6/bgen-1.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e57bc982318dcae4b00b303a3e603a935c9f725ad1c74a42cc0cda1174a6ca97",
                "md5": "a738ae164bc3044dd93b6ea0475aac09",
                "sha256": "69eaa7744e716e31545df6fd93ad0f2b5af64bb2eafa2cc691f746462c7335dd"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a738ae164bc3044dd93b6ea0475aac09",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": null,
            "size": 3765882,
            "upload_time": "2024-12-03T00:56:49",
            "upload_time_iso_8601": "2024-12-03T00:56:49.876290Z",
            "url": "https://files.pythonhosted.org/packages/e5/7b/c982318dcae4b00b303a3e603a935c9f725ad1c74a42cc0cda1174a6ca97/bgen-1.7.3-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "41687d25c2782b5e5c65444240197e7250ebc3d6c685fc2fda48da1df306de49",
                "md5": "fa6857b775cc86a2e22bed79cea9c655",
                "sha256": "b7c95a520b7f784219005da3e42052d02440c7939ab11c5312ba7d577077f121"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "fa6857b775cc86a2e22bed79cea9c655",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": null,
            "size": 444333,
            "upload_time": "2024-12-03T00:56:51",
            "upload_time_iso_8601": "2024-12-03T00:56:51.961734Z",
            "url": "https://files.pythonhosted.org/packages/41/68/7d25c2782b5e5c65444240197e7250ebc3d6c685fc2fda48da1df306de49/bgen-1.7.3-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "20a09d944cea8987b2644d49eee04dc7b774a6e2745c473971c44cff42ef0ce8",
                "md5": "7c1ccbde0e3a1f8d44b40f17db7d33e9",
                "sha256": "7109d10bfb4c0b6cde52f489fe55d410e93b2ccfb60afe2226bceda5924f282f"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7c1ccbde0e3a1f8d44b40f17db7d33e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": null,
            "size": 495869,
            "upload_time": "2024-12-03T00:56:53",
            "upload_time_iso_8601": "2024-12-03T00:56:53.032901Z",
            "url": "https://files.pythonhosted.org/packages/20/a0/9d944cea8987b2644d49eee04dc7b774a6e2745c473971c44cff42ef0ce8/bgen-1.7.3-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ab2d69117de4ff64e03fb1ebf932b16dac6a8a9e18f9a7f8b17ac5abcf26be8d",
                "md5": "247055f3fbb30e0a0fadf4243fd82c39",
                "sha256": "cd89df0de630948ca313a9d6b8aa7401a8581ad19f12ff199244350217ca44c6"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "247055f3fbb30e0a0fadf4243fd82c39",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 867945,
            "upload_time": "2024-12-03T00:56:54",
            "upload_time_iso_8601": "2024-12-03T00:56:54.170534Z",
            "url": "https://files.pythonhosted.org/packages/ab/2d/69117de4ff64e03fb1ebf932b16dac6a8a9e18f9a7f8b17ac5abcf26be8d/bgen-1.7.3-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea1a151c52c0c57f91b729124366f5a6c404cc9ff07cb5a2ca987aca9d289337",
                "md5": "ae3abd9a391089737dddb7ec5e761092",
                "sha256": "c42d85f00fa329835f2b8e901ad7a5813d9d1af003c2fcee1367e2c22e4ef3ec"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ae3abd9a391089737dddb7ec5e761092",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 2639023,
            "upload_time": "2024-12-03T00:56:55",
            "upload_time_iso_8601": "2024-12-03T00:56:55.406449Z",
            "url": "https://files.pythonhosted.org/packages/ea/1a/151c52c0c57f91b729124366f5a6c404cc9ff07cb5a2ca987aca9d289337/bgen-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "19a7e5b3b2dd25bc1e08c046f8966abf5d9e84a0362149df6a6076492235953c",
                "md5": "827df4d308ca6f0b256d62a479da4991",
                "sha256": "c9cceab8f1f751b894428b99dc1ef8ddfd6903ffebecde33a8c1f46a7e214c26"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp38-cp38-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "827df4d308ca6f0b256d62a479da4991",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 3685059,
            "upload_time": "2024-12-03T00:56:57",
            "upload_time_iso_8601": "2024-12-03T00:56:57.476839Z",
            "url": "https://files.pythonhosted.org/packages/19/a7/e5b3b2dd25bc1e08c046f8966abf5d9e84a0362149df6a6076492235953c/bgen-1.7.3-cp38-cp38-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9a650dce0ae1a7d4eb8f845d507780121ec1dba5f5da9ac4b38ba90019d3a6cf",
                "md5": "57f862d7c23f2cf476548222ca45f970",
                "sha256": "685120c0ffc92dc1336a27f8e75315d3cf6b75da7fe3215db37d165c88427b8c"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "57f862d7c23f2cf476548222ca45f970",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 445809,
            "upload_time": "2024-12-03T00:56:58",
            "upload_time_iso_8601": "2024-12-03T00:56:58.844258Z",
            "url": "https://files.pythonhosted.org/packages/9a/65/0dce0ae1a7d4eb8f845d507780121ec1dba5f5da9ac4b38ba90019d3a6cf/bgen-1.7.3-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "64d337d7c4a15e0d0f6903ba13466e5a5ac77de2ace150c27f523cc9a7002adb",
                "md5": "c76f4d3004d08777f5b11251b20ed3a5",
                "sha256": "940049eed292b40398a13450f270285f66782f63882a655edef20ecf1609230f"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c76f4d3004d08777f5b11251b20ed3a5",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 498011,
            "upload_time": "2024-12-03T00:56:59",
            "upload_time_iso_8601": "2024-12-03T00:56:59.959634Z",
            "url": "https://files.pythonhosted.org/packages/64/d3/37d7c4a15e0d0f6903ba13466e5a5ac77de2ace150c27f523cc9a7002adb/bgen-1.7.3-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a0c95cab685af60bc0595af708ea4440675786aa9904590ec3692da60427eb47",
                "md5": "ad217279ffb1144f0fd184b909d8e552",
                "sha256": "e1fda0f0008fe8836a37397861656b8362f91a5c9313775db6de99315609b832"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ad217279ffb1144f0fd184b909d8e552",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 868653,
            "upload_time": "2024-12-03T00:57:01",
            "upload_time_iso_8601": "2024-12-03T00:57:01.745151Z",
            "url": "https://files.pythonhosted.org/packages/a0/c9/5cab685af60bc0595af708ea4440675786aa9904590ec3692da60427eb47/bgen-1.7.3-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "641de7bd1fb721d3b2ae69d68d706907ce6ca12ca14755aaf8e4de699f502725",
                "md5": "c4478d299ef4f78daaa8b1d418a41fe3",
                "sha256": "d2ec24e2821ea7dbde74f521c7a53c8b10ed93332da2c16a165a349b21669eef"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c4478d299ef4f78daaa8b1d418a41fe3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 2582917,
            "upload_time": "2024-12-03T00:57:03",
            "upload_time_iso_8601": "2024-12-03T00:57:03.712049Z",
            "url": "https://files.pythonhosted.org/packages/64/1d/e7bd1fb721d3b2ae69d68d706907ce6ca12ca14755aaf8e4de699f502725/bgen-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "68e9f1bb2c8d6cd167f0f25c05bdc15a76b2eabd1702577233572c917e944a78",
                "md5": "655ed10dea4be641a82e77f5d02c4f0e",
                "sha256": "b66a75b60452f6d9bd504d851f1b944d5f1f951a7f3e079aa6b9ddc0dfad067e"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "655ed10dea4be641a82e77f5d02c4f0e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 3624421,
            "upload_time": "2024-12-03T00:57:05",
            "upload_time_iso_8601": "2024-12-03T00:57:05.709533Z",
            "url": "https://files.pythonhosted.org/packages/68/e9/f1bb2c8d6cd167f0f25c05bdc15a76b2eabd1702577233572c917e944a78/bgen-1.7.3-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c376fcddf9046639010b85309b11de36b0a477fbf443947f43d57862c5aafe3e",
                "md5": "466c6ebb77c51be6281607835aea1f0b",
                "sha256": "aa0ea0bd4814ea7a5613004d120b344d451092ee66a5291c6db717e392c8aa3d"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "466c6ebb77c51be6281607835aea1f0b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 445763,
            "upload_time": "2024-12-03T00:57:07",
            "upload_time_iso_8601": "2024-12-03T00:57:07.776172Z",
            "url": "https://files.pythonhosted.org/packages/c3/76/fcddf9046639010b85309b11de36b0a477fbf443947f43d57862c5aafe3e/bgen-1.7.3-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6e93b8aeea60b04b0aa5a8d8eb1982b4fae1ffb1ed465e4e9896222d7167a7e",
                "md5": "4e58847d9eb19e2cf5137dd1d1d690a2",
                "sha256": "1dd25cdcc953bca713b1b14d009624360adac6954f516b3eeb9088d3b9ef6f8d"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4e58847d9eb19e2cf5137dd1d1d690a2",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 497752,
            "upload_time": "2024-12-03T00:57:09",
            "upload_time_iso_8601": "2024-12-03T00:57:09.607778Z",
            "url": "https://files.pythonhosted.org/packages/f6/e9/3b8aeea60b04b0aa5a8d8eb1982b4fae1ffb1ed465e4e9896222d7167a7e/bgen-1.7.3-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b82377a5461b6d57e2a3542c5874a7a65a271546ccbfea95d419c03e2e19d2a7",
                "md5": "44bf2b1a3849fbaefe86e6b4c4a32793",
                "sha256": "d7c5954fa5748b86d44715e75b15a0c94cf12782bca134ff6ef95fa1d5e78814"
            },
            "downloads": -1,
            "filename": "bgen-1.7.3.tar.gz",
            "has_sig": false,
            "md5_digest": "44bf2b1a3849fbaefe86e6b4c4a32793",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 901912,
            "upload_time": "2024-12-03T00:57:10",
            "upload_time_iso_8601": "2024-12-03T00:57:10.764164Z",
            "url": "https://files.pythonhosted.org/packages/b8/23/77a5461b6d57e2a3542c5874a7a65a271546ccbfea95d419c03e2e19d2a7/bgen-1.7.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-03 00:57:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jeremymcrae",
    "github_project": "bgen",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "bgen"
}
        
Elapsed time: 0.47596s