# EasyStructure
## Introduction
EasyStructure is a cleant-up and repackaged version [fastStructure](https://github.com/rajanil/fastStructure). It runs on Python 3 and
can be straightforwardly installed using `pip install ezstructure`. It does not depend on any
non-Python libraries. Compared to the original *fastStructure* program, this version is about 50%
slower when using the `--prior=logistic` option (but not with the default value of `simple`).
*fastStructure* is a fast algorithm for inferring population structure from large SNP genotype data.
It is based on a variational Bayesian framework for posterior inference and was written in Python2.x.
## Citation
Anil Raj, Matthew Stephens, and Jonathan K. Pritchard. *fastSTRUCTURE: Variational Inference of
Population Structure in Large SNP Data Sets*, (Genetics) June 2014 197:573-589
[[Genetics](https://www.genetics.org/content/197/2/573.full),
[Biorxiv](https://biorxiv.org/content/early/2013/12/02/001073)]
## Installation
EasyStructure can be installed easily by using the `pip` package installer.
If you have `pip` installed, just run the following command to install the latest release:
pip install -U ezstructure
## Using EasyStructure
EasyStructure is command-line software. The main command is `ezstructure`. You can view the
command-line help by running the command:
ezstructure --help
EasyStructure, like its ancestor FastStructure, performs inference for the simplest, independent-loci,
admixture model, with two choices of priors that can be specified using the `--prior` flag.
Thus, unlike Structure, EasyStructure does not require the mainparams and extraparam files.
The inference algorithm used by FastStructure is fundamentally different from that of Structure and
requires the setting of far fewer options. All options can be passed via the flags listed above.
### Main options
The key options to pass to the scripts are the input file, the output file and the number of populations.
Assuming the input file is named `genotypes.bed` (with corresponding `genotypes.fam` and `genotypes.bim`),
the output file is named `genotypes_output` and the number of populations you would like is 3,
you can run the algorithm as follows:
ezstructure -K 3 --input=genotypes --output=genotypes_output
This generates a `genotypes_output.3.log` file that tracks how the algorithm proceeds, and files
`genotypes_output.3.meanQ` and `genotypes_output.3.meanP` containing the posterior mean of
admixture proportions and allele frequencies, respectively. The orders of samples and
SNPs in the output files match those in the `.fam` file and `.bim` file, respectively.
Note that input file names need not include suffixes (e.g., .bed).
### Input data format
The current implementation can import data from [plink bed](https://zzz.bwh.harvard.edu/plink/binary.shtml)
format and the original Structure format. If the data are in plink format, ensure that
bed, bim and fam files for the dataset are all present in the same path.
While the original Structure program allowed for a more flexible input format, fastStructure expects a more
specific Structure-like input format. Specifically, rows in the data file correspond to samples, with two rows per sample
(note that only diploids are handled by this software), and columns correspond to SNPs. The first 6 columns
of the file will be ignored; these typically would include IDs, metadata, etc. This software only
handles bi-allelic loci. The two alleles at each locus can be encoded as desired; however, missing data
should be encoded as -9.
## Running on test data
A test simulated dataset is provided in `test/testdata.bed` in the source repository at
[GitHub](https://github.com/Jerrythafast/ezstructure) with genotypes sampled for
200 individuals at 500 SNP loci. The output files in `test/` were generated as follows:
ezstructure -K 3 --input=test/testdata --output=testoutput_simple --full --seed=100
ezstructure -K 3 --input=test/testdata --output=testoutput_logistic --full --seed=100 --prior=logistic
Executing the code with the provided test data should generate a log file identical to the ones in `test/`,
(except for the numbers in the `Iteration_Time (secs)` column) as a final check that the source code
has been downloaded and compiled correctly. The algorithm scales linearly with number of samples,
number of loci and value of K; the expected runtime for a new dataset can be computed from the runtime in the above log file.
## Choosing model complexity
In order to choose the appropriate number of model components that explain structure in the dataset,
we recommend running the algorithm for multiple choices of K. We have provided a utility tool,
`structure_choosek`, to parse through the output of these runs and provide a reasonable range of
values for the model complexity appropriate for this dataset.
Assuming the algorithm was run on the test dataset for choices of K ranging from 1 to 10, and
the output flag was --output=test/testoutput_simple, you can obtain the model complexity
by doing the following:
ezstructure_choosek --input=test/testoutput_simple
The output would look like:
Model complexity that maximizes marginal likelihood = 2
Model components used to explain structure in data = 4
## Visualizing admixture proportions
In order to visualize the expected admixture proportions inferred by EasyStructure, we have
provided a simple tool to generate [Distruct](https://web.stanford.edu/group/rosenberglab/distruct.html)
plots using the mean of the variational posterior distribution over admixture proportions.
The samples in the plot will be grouped according to population labels inferred by EasyStructure.
However, if the user would like to group the samples according to some other categorical label
(e.g., geographic location), these labels can be provided as a separate file using the flag --popfile.
The order of labels in this file (one label per row) should match the order of samples in the input data files.
Assuming the algorithm was run on the test dataset for K=5, and
the output flag was --output=test/testoutput_simple, you can generate a Distruct plot
by doing the following:
ezdistruct -K 5 --input=test/testoutput_simple --output=test/testoutput_simple_distruct.svg
## Python interface
As EasyStructure can be installed using pip, it is possible to use it as a dependency for other
packages. To use EasyStructure from within Python code, use the following example:
from ezstructure.io import parse_bed, parse_str, write_output
from ezstructure.structure import run_structure
# Parse input file.
G = parse_bed("example.bed") # Or parse_str("example.str")
# Set parameters.
K = 3
out_prefix = "example"
tol = 1e-6
prior = "simple"
cv = 0
# Run algorithm.
Q, P, other = run_structure(G, K, out_prefix, tol, prior, cv)
# Write output.
write_output(Q, P, other, K, out_prefix, full=True)
## Changelog
### Version 1.0.0
Initial repackaged version.
### Version 1.0.1
Corrected `python_requires` declaration to exclude Python 3.5.
### Version 1.0.2
Updated to support Cython3 and use `language_level=3`.
Raw data
{
"_id": null,
"home_page": "",
"name": "ezstructure",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "bioinformatics forensics structure ancestry",
"author": "Jerry Hoogenboom",
"author_email": "jerryhoogenboom@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/3f/7a/1c24b8cc8d02e85d20f6363dbfe2bf06e805f11d50f7eb619d0c87dad612/ezstructure-1.0.2.tar.gz",
"platform": null,
"description": "# EasyStructure\r\n\r\n## Introduction\r\n\r\nEasyStructure is a cleant-up and repackaged version [fastStructure](https://github.com/rajanil/fastStructure). It runs on Python 3 and\r\ncan be straightforwardly installed using `pip install ezstructure`. It does not depend on any\r\nnon-Python libraries. Compared to the original *fastStructure* program, this version is about 50%\r\nslower when using the `--prior=logistic` option (but not with the default value of `simple`).\r\n\r\n*fastStructure* is a fast algorithm for inferring population structure from large SNP genotype data.\r\nIt is based on a variational Bayesian framework for posterior inference and was written in Python2.x.\r\n\r\n\r\n## Citation\r\n\r\nAnil Raj, Matthew Stephens, and Jonathan K. Pritchard. *fastSTRUCTURE: Variational Inference of\r\nPopulation Structure in Large SNP Data Sets*, (Genetics) June 2014 197:573-589\r\n[[Genetics](https://www.genetics.org/content/197/2/573.full),\r\n[Biorxiv](https://biorxiv.org/content/early/2013/12/02/001073)]\r\n\r\n\r\n## Installation\r\n\r\nEasyStructure can be installed easily by using the `pip` package installer.\r\nIf you have `pip` installed, just run the following command to install the latest release:\r\n\r\n pip install -U ezstructure\r\n\r\n\r\n## Using EasyStructure\r\n\r\nEasyStructure is command-line software. The main command is `ezstructure`. You can view the\r\ncommand-line help by running the command:\r\n\r\n ezstructure --help\r\n\r\nEasyStructure, like its ancestor FastStructure, performs inference for the simplest, independent-loci,\r\nadmixture model, with two choices of priors that can be specified using the `--prior` flag.\r\nThus, unlike Structure, EasyStructure does not require the mainparams and extraparam files.\r\nThe inference algorithm used by FastStructure is fundamentally different from that of Structure and\r\nrequires the setting of far fewer options. All options can be passed via the flags listed above.\r\n\r\n\r\n### Main options\r\n\r\nThe key options to pass to the scripts are the input file, the output file and the number of populations.\r\nAssuming the input file is named `genotypes.bed` (with corresponding `genotypes.fam` and `genotypes.bim`),\r\nthe output file is named `genotypes_output` and the number of populations you would like is 3,\r\nyou can run the algorithm as follows:\r\n\r\n ezstructure -K 3 --input=genotypes --output=genotypes_output\r\n\r\nThis generates a `genotypes_output.3.log` file that tracks how the algorithm proceeds, and files\r\n`genotypes_output.3.meanQ` and `genotypes_output.3.meanP` containing the posterior mean of\r\nadmixture proportions and allele frequencies, respectively. The orders of samples and\r\nSNPs in the output files match those in the `.fam` file and `.bim` file, respectively.\r\nNote that input file names need not include suffixes (e.g., .bed).\r\n\r\n\r\n### Input data format\r\n\r\nThe current implementation can import data from [plink bed](https://zzz.bwh.harvard.edu/plink/binary.shtml)\r\nformat and the original Structure format. If the data are in plink format, ensure that\r\nbed, bim and fam files for the dataset are all present in the same path.\r\n\r\nWhile the original Structure program allowed for a more flexible input format, fastStructure expects a more\r\nspecific Structure-like input format. Specifically, rows in the data file correspond to samples, with two rows per sample\r\n(note that only diploids are handled by this software), and columns correspond to SNPs. The first 6 columns\r\nof the file will be ignored; these typically would include IDs, metadata, etc. This software only\r\nhandles bi-allelic loci. The two alleles at each locus can be encoded as desired; however, missing data\r\nshould be encoded as -9.\r\n\r\n\r\n## Running on test data\r\n\r\nA test simulated dataset is provided in `test/testdata.bed` in the source repository at\r\n[GitHub](https://github.com/Jerrythafast/ezstructure) with genotypes sampled for\r\n200 individuals at 500 SNP loci. The output files in `test/` were generated as follows:\r\n\r\n ezstructure -K 3 --input=test/testdata --output=testoutput_simple --full --seed=100\r\n ezstructure -K 3 --input=test/testdata --output=testoutput_logistic --full --seed=100 --prior=logistic\r\n\r\nExecuting the code with the provided test data should generate a log file identical to the ones in `test/`,\r\n(except for the numbers in the `Iteration_Time (secs)` column) as a final check that the source code\r\nhas been downloaded and compiled correctly. The algorithm scales linearly with number of samples,\r\nnumber of loci and value of K; the expected runtime for a new dataset can be computed from the runtime in the above log file.\r\n\r\n\r\n## Choosing model complexity\r\n\r\nIn order to choose the appropriate number of model components that explain structure in the dataset,\r\nwe recommend running the algorithm for multiple choices of K. We have provided a utility tool,\r\n`structure_choosek`, to parse through the output of these runs and provide a reasonable range of\r\nvalues for the model complexity appropriate for this dataset.\r\n\r\nAssuming the algorithm was run on the test dataset for choices of K ranging from 1 to 10, and\r\nthe output flag was --output=test/testoutput_simple, you can obtain the model complexity\r\nby doing the following:\r\n\r\n ezstructure_choosek --input=test/testoutput_simple\r\n\r\nThe output would look like:\r\n\r\n Model complexity that maximizes marginal likelihood = 2\r\n Model components used to explain structure in data = 4\r\n\r\n\r\n## Visualizing admixture proportions\r\n\r\nIn order to visualize the expected admixture proportions inferred by EasyStructure, we have\r\nprovided a simple tool to generate [Distruct](https://web.stanford.edu/group/rosenberglab/distruct.html)\r\nplots using the mean of the variational posterior distribution over admixture proportions.\r\nThe samples in the plot will be grouped according to population labels inferred by EasyStructure.\r\nHowever, if the user would like to group the samples according to some other categorical label\r\n(e.g., geographic location), these labels can be provided as a separate file using the flag --popfile.\r\nThe order of labels in this file (one label per row) should match the order of samples in the input data files.\r\n\r\nAssuming the algorithm was run on the test dataset for K=5, and\r\nthe output flag was --output=test/testoutput_simple, you can generate a Distruct plot\r\nby doing the following:\r\n\r\n ezdistruct -K 5 --input=test/testoutput_simple --output=test/testoutput_simple_distruct.svg\r\n\r\n\r\n## Python interface\r\n\r\nAs EasyStructure can be installed using pip, it is possible to use it as a dependency for other\r\npackages. To use EasyStructure from within Python code, use the following example:\r\n\r\n from ezstructure.io import parse_bed, parse_str, write_output\r\n from ezstructure.structure import run_structure\r\n\r\n # Parse input file.\r\n G = parse_bed(\"example.bed\") # Or parse_str(\"example.str\")\r\n\r\n # Set parameters.\r\n K = 3\r\n out_prefix = \"example\"\r\n tol = 1e-6\r\n prior = \"simple\"\r\n cv = 0\r\n\r\n # Run algorithm.\r\n Q, P, other = run_structure(G, K, out_prefix, tol, prior, cv)\r\n\r\n # Write output.\r\n write_output(Q, P, other, K, out_prefix, full=True)\r\n\r\n\r\n## Changelog\r\n\r\n### Version 1.0.0\r\n\r\nInitial repackaged version.\r\n\r\n### Version 1.0.1\r\n\r\nCorrected `python_requires` declaration to exclude Python 3.5.\r\n\r\n### Version 1.0.2\r\n\r\nUpdated to support Cython3 and use `language_level=3`.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "EasyStructure",
"version": "1.0.2",
"project_urls": {
"Bug Tracker": "https://github.com/Jerrythafast/ezstructure/issues",
"Source Code": "https://github.com/Jerrythafast/ezstructure"
},
"split_keywords": [
"bioinformatics",
"forensics",
"structure",
"ancestry"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d8e8bfcc3ae4ac48ba24589b0f820bb6434fdcf1d23c3863244cc45925b48721",
"md5": "c27f468b529de2c474bd1291bc7a5477",
"sha256": "29f92c6d4f52fa94e5cf9835d66a1085e5a0ffbc8d008694e97977cee62e3272"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "c27f468b529de2c474bd1291bc7a5477",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 235380,
"upload_time": "2024-01-09T17:10:07",
"upload_time_iso_8601": "2024-01-09T17:10:07.989359Z",
"url": "https://files.pythonhosted.org/packages/d8/e8/bfcc3ae4ac48ba24589b0f820bb6434fdcf1d23c3863244cc45925b48721/ezstructure-1.0.2-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c980e0dfa2f04d19cba95bbe033227aee2435ba97dec3cba4c79bb05f6ac61c7",
"md5": "1cb2b9e7eb081634b535c47c396225b5",
"sha256": "eaf20a5de1ce9f555e36b98015379e738bea7e64829d0689ccd3de8736ed5f8b"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "1cb2b9e7eb081634b535c47c396225b5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 258343,
"upload_time": "2024-01-09T17:10:10",
"upload_time_iso_8601": "2024-01-09T17:10:10.241006Z",
"url": "https://files.pythonhosted.org/packages/c9/80/e0dfa2f04d19cba95bbe033227aee2435ba97dec3cba4c79bb05f6ac61c7/ezstructure-1.0.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9481f06d82d93e4854a18f0e0929877d8e89b9c2bf95ad0d5c8cff2b544a3011",
"md5": "15e27e750de6878fc48e219b0c5eec48",
"sha256": "917203312dc0fc88089b41c7f4e39369a7fd6494ee648acf138a20ee7ea4ca10"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "15e27e750de6878fc48e219b0c5eec48",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 234270,
"upload_time": "2024-01-09T17:10:11",
"upload_time_iso_8601": "2024-01-09T17:10:11.999005Z",
"url": "https://files.pythonhosted.org/packages/94/81/f06d82d93e4854a18f0e0929877d8e89b9c2bf95ad0d5c8cff2b544a3011/ezstructure-1.0.2-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1e78ad1b56768846cdec1f2f6b5df88b0da5361f77390306b6b4a9e172d86570",
"md5": "9b277613ddf57b071b195d0ac8a3944c",
"sha256": "1716702ab5c652a9bfb3803d7148266383bc9739375275bcad8c65646294f797"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "9b277613ddf57b071b195d0ac8a3944c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 258397,
"upload_time": "2024-01-09T17:10:13",
"upload_time_iso_8601": "2024-01-09T17:10:13.391279Z",
"url": "https://files.pythonhosted.org/packages/1e/78/ad1b56768846cdec1f2f6b5df88b0da5361f77390306b6b4a9e172d86570/ezstructure-1.0.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a39ba81c7ddafc0c4981a56395579867e51e4a592bfed17fb585ddd4969ab02e",
"md5": "dddab3a002e86d92ced4eb300d634a71",
"sha256": "983b119e93ce8a7c78600607e102a1b99f04b064a2a2daba67b516400c01aad1"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "dddab3a002e86d92ced4eb300d634a71",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 228416,
"upload_time": "2024-01-09T17:10:15",
"upload_time_iso_8601": "2024-01-09T17:10:15.470084Z",
"url": "https://files.pythonhosted.org/packages/a3/9b/a81c7ddafc0c4981a56395579867e51e4a592bfed17fb585ddd4969ab02e/ezstructure-1.0.2-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b53ade2e7cc34497829c7bdac5e297eb0c974fb4f2ab5df3e685475ac1100ec9",
"md5": "a867d56b24cb5b867f18f5124418c91b",
"sha256": "f779b3881bd0f1c12c055bbe48abe40bdde13fb31a6dcacbb7e1454f8c4a5f0c"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "a867d56b24cb5b867f18f5124418c91b",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 247057,
"upload_time": "2024-01-09T17:10:17",
"upload_time_iso_8601": "2024-01-09T17:10:17.311867Z",
"url": "https://files.pythonhosted.org/packages/b5/3a/de2e7cc34497829c7bdac5e297eb0c974fb4f2ab5df3e685475ac1100ec9/ezstructure-1.0.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "60a7cd914c7552249fd2de38598c4366ae881b9d8adbc76b5b1a079c35ac13ec",
"md5": "60b0167843c1dbba5a5bd6fc420ba08e",
"sha256": "c535fc8d66bd0ba71687e93eabb46cbb5f83864fbb3c29c49905e440ddc74fe3"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp36-cp36m-win32.whl",
"has_sig": false,
"md5_digest": "60b0167843c1dbba5a5bd6fc420ba08e",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 251160,
"upload_time": "2024-01-09T17:10:19",
"upload_time_iso_8601": "2024-01-09T17:10:19.331476Z",
"url": "https://files.pythonhosted.org/packages/60/a7/cd914c7552249fd2de38598c4366ae881b9d8adbc76b5b1a079c35ac13ec/ezstructure-1.0.2-cp36-cp36m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8f026681d649f36acdb6ec2fc7c40a484a8bde46592fc062bc9e9451ed1817b9",
"md5": "1f386e05df736e03dbd45d49bd122ac3",
"sha256": "ae235cc188fcea079f479f56479a2fc0f3e8d5f21f817ba06130580e5d26b84a"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "1f386e05df736e03dbd45d49bd122ac3",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 279063,
"upload_time": "2024-01-09T17:10:20",
"upload_time_iso_8601": "2024-01-09T17:10:20.563472Z",
"url": "https://files.pythonhosted.org/packages/8f/02/6681d649f36acdb6ec2fc7c40a484a8bde46592fc062bc9e9451ed1817b9/ezstructure-1.0.2-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e597e0165567266c6939537b59d8c9f69a899306099155307420dc6a5e57bc07",
"md5": "a9789c75ef0c177cfb137e9863ad6b87",
"sha256": "2c6514cf8ab286ae7b2e11bc3b85acabfb7747fd31b208453a476df31b63f0b0"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp37-cp37m-win32.whl",
"has_sig": false,
"md5_digest": "a9789c75ef0c177cfb137e9863ad6b87",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 234133,
"upload_time": "2024-01-09T17:10:22",
"upload_time_iso_8601": "2024-01-09T17:10:22.329971Z",
"url": "https://files.pythonhosted.org/packages/e5/97/e0165567266c6939537b59d8c9f69a899306099155307420dc6a5e57bc07/ezstructure-1.0.2-cp37-cp37m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "47c3be83f1ceb1cc69b0b197a4cf10cdc87883efdf09f1916e87d52ce2c756bf",
"md5": "04d9d51313dffcd557797301589558e2",
"sha256": "130da0df3eec235b35347a76b6b8f76a0b3cb0812aab290199f28cc92c538ad9"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "04d9d51313dffcd557797301589558e2",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 253971,
"upload_time": "2024-01-09T17:10:23",
"upload_time_iso_8601": "2024-01-09T17:10:23.770525Z",
"url": "https://files.pythonhosted.org/packages/47/c3/be83f1ceb1cc69b0b197a4cf10cdc87883efdf09f1916e87d52ce2c756bf/ezstructure-1.0.2-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9454e79f8ef67d1f4927e74d67cea35a58ed20bdc699840d915391bb412cf209",
"md5": "cd3692ba9642bda2a9ba2054850ab6bb",
"sha256": "bb41488a3c9bef8ed0aab05ba930fa87dc3bab1d39fe4f73aa74feaf6cfb8289"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "cd3692ba9642bda2a9ba2054850ab6bb",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 238520,
"upload_time": "2024-01-09T17:10:25",
"upload_time_iso_8601": "2024-01-09T17:10:25.678534Z",
"url": "https://files.pythonhosted.org/packages/94/54/e79f8ef67d1f4927e74d67cea35a58ed20bdc699840d915391bb412cf209/ezstructure-1.0.2-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d520cd5a3676e1aeaef0c3eaabb5b15e1ac6ab00fd8c4a5cefc2f0dddee53d97",
"md5": "41b1079c18a60b8f4542897d4802061a",
"sha256": "b7ed3eb0e3fd6d83f629c865e4ba9eebe7bc1fc3a23d60a3e8db36b53e4ad8ab"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "41b1079c18a60b8f4542897d4802061a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 260376,
"upload_time": "2024-01-09T17:10:26",
"upload_time_iso_8601": "2024-01-09T17:10:26.840627Z",
"url": "https://files.pythonhosted.org/packages/d5/20/cd5a3676e1aeaef0c3eaabb5b15e1ac6ab00fd8c4a5cefc2f0dddee53d97/ezstructure-1.0.2-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4345f4be57b9ef80cb3f80a172ac16558b23cf7580cff811fe34443ffc420a0c",
"md5": "2a48b52463b8a3e738ba8567e455e9ee",
"sha256": "b11cdc5e7a4bb7e0525ed7fde2f21fa6dcf8abc86e23cd7e496aaafbd93a925a"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "2a48b52463b8a3e738ba8567e455e9ee",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 235766,
"upload_time": "2024-01-09T17:10:28",
"upload_time_iso_8601": "2024-01-09T17:10:28.267421Z",
"url": "https://files.pythonhosted.org/packages/43/45/f4be57b9ef80cb3f80a172ac16558b23cf7580cff811fe34443ffc420a0c/ezstructure-1.0.2-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6177f9a4522bbbdd98958195519e6b0cb5b06bd0324f9d78ca0604f46500fb39",
"md5": "c12ff6a679378959f04219b8f83d3508",
"sha256": "e148acd6ff8071f28e43eeba81e451b6af4fb93db9914f17ec901e706870e84d"
},
"downloads": -1,
"filename": "ezstructure-1.0.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "c12ff6a679378959f04219b8f83d3508",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 258530,
"upload_time": "2024-01-09T17:10:29",
"upload_time_iso_8601": "2024-01-09T17:10:29.615459Z",
"url": "https://files.pythonhosted.org/packages/61/77/f9a4522bbbdd98958195519e6b0cb5b06bd0324f9d78ca0604f46500fb39/ezstructure-1.0.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3f7a1c24b8cc8d02e85d20f6363dbfe2bf06e805f11d50f7eb619d0c87dad612",
"md5": "2a5967bc145c54bacc4a4229d412265b",
"sha256": "6e6f9a2a0524603507c615f16e2b6b410c201060b53e98296fd42b37fdea4a64"
},
"downloads": -1,
"filename": "ezstructure-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "2a5967bc145c54bacc4a4229d412265b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 22960,
"upload_time": "2024-01-09T17:10:30",
"upload_time_iso_8601": "2024-01-09T17:10:30.789872Z",
"url": "https://files.pythonhosted.org/packages/3f/7a/1c24b8cc8d02e85d20f6363dbfe2bf06e805f11d50f7eb619d0c87dad612/ezstructure-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-09 17:10:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Jerrythafast",
"github_project": "ezstructure",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "ezstructure"
}