strkit


Namestrkit JSON
Version 0.20.0 PyPI version JSON
download
home_pagehttps://github.com/davidlougheed/strkit
SummaryA toolkit for analyzing variation in short(ish) tandem repeats.
upload_time2025-01-06 21:29:27
maintainerNone
docs_urlNone
authorDavid Lougheed
requires_python~=3.10
licenseGPLv3
keywords
VCS
bugtrack_url
requirements blinker click coverage Cython exceptiongroup Flask importlib_metadata iniconfig itsdangerous Jinja2 joblib MarkupSafe numpy orjson packaging pandas parasail patsy pluggy pyparsing pysam pytest pytest-cov python-dateutil pytz scikit-learn scipy six statsmodels strkit_rust_ext threadpoolctl tomli tzdata Werkzeug zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # STRkit - short tandem repeat genotyping with long reads

[![PyPI version](https://badge.fury.io/py/strkit.svg)](https://badge.fury.io/py/strkit)
[![Zenodo DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.12689906.svg)](https://doi.org/10.5281/zenodo.12689906)

STRkit is a short tandem repeat (STR) genotyping and analysis toolkit for long read sequencing data, especially 
PacBio HiFi data. The STRkit software package is written in Python and is available in the PyPI package registry or as
a Docker container.

If you use STRkit in published work in its current state, please cite the version you use via 
[Zenodo DOI](https://zenodo.org/records/12689906).

<img src="./docs/images/strkit_logo_small.png" alt="" width="500" height="324" />


## Copyright and License

* 2021-2023: &copy; David Lougheed (DL) and McGill University 2021-2023 (versions up to and including `0.8.0a1`), 
  created during graduate research by DL.
* 2023+: (versions beyond `0.8.0a1`):
  * Portions &copy; DL and McGill University 2021-2023
  * Portions &copy; McGill University 2024
  * Portions &copy; DL 2024


### Notice

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

### Exceptions

**Some exclusions to this license apply; specifically portions of 
[`strkit/viz/templates/browser.html`](strkit/viz/templates/browser.html) and
the STRkit logo files ([./docs/images/strkit_logo_small.png](./docs/images/strkit_logo_small.png)
and [./strkit/viz/static/logo.png](./strkit/viz/static/logo.png).)**

The STRkit logo is &copy; David Lougheed 2022, and was designed by Evelyn Lougheed. It is not licensed
under the terms of the GPL 3.0; it is instead licensed under the terms of the 
[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/).

Portions of `viz/templates/browser.html` copyright (C) 2021-2022  Observable, Inc.
Used under the terms of the ISC license.


## Installation

### Via PyPI

STRkit requires Python 3.10+ and can be installed from PyPI via `pip` 
with the following command:

```bash
python -m pip install strkit
```

You may need to install the [Rust toolchain](https://www.rust-lang.org/tools/install)
to compile the `strkit_rust_ext` wheel, although prebuilt wheels for this module are available
for some platforms. Compiling the wheel may take quite a long time (in the tens of minutes).

On Digital Research Alliance of Canada/Compute Canada clusters, this involves loading a few modules:

```bash
module load rust/1.76.0 clang/17.0.6 python/3.11 scipy-stack/2023b parasail/2.6.2
python -m pip install strkit
```

STRkit should then be available in your Python environment as a command-line tool:

```bash
strkit --help
```

### As a Docker container

STRkit is also available as a [Docker container](https://github.com/davidlougheed/strkit/pkgs/container/strkit), stored 
in the GitHub Container Registry.

It can be pulled using the following command:

```bash
docker pull ghcr.io/davidlougheed/strkit:latest
```

Then, STRkit commands can be run mostly as normal using the Docker image:

```bash
docker run -it ghcr.io/davidlougheed/strkit --help
```


## Commands

### `strkit call`: Genotype caller with bootstrapped confidence intervals

A Gaussian mixture model tandem repeat genotype caller for long read data.
STRkit is tuned specifically for high-fidelity long reads, although other 
long read data should still work.

![Calling approach flow chart](./docs/images/call_method_flow.png)

#### Features:

* Performant, vectorized (thanks to [parasail](https://github.com/jeffdaily/parasail))
  estimates of repeat counts from high-fidelity long reads and a supplied 
  catalog of TR loci and motifs.
* Re-weighting of longer reads, to compensate for their lower likelihood of observation.
  * Whole-genome and targeted genotyping modes to adjust this re-weighting.
* Incorporation of single-nucleotide variation (SNVs) for better and faster calling plus 
  additional downstream analysis possibilities.
  * Recommended for **HiFi data and ONT R10 data only**. In my testing, this worsens runtime and call quality for 
    ONT ultra-long-read data, but speeds up the tool and improves call quality for HiFi/ONT R10 data. 
* Parallelized for faster computing on clusters and for ad-hoc fast analysis of single samples.
* 95% confidence intervals on calls via a user-configurable optional parametric bootstrapping process.


#### Usage: *(see all parameters: [Advanced caller usage and configuration](./docs/caller_usage.md))*

```bash
strkit call \
  path/to/read/file.bam \  # [REQUIRED] One indexed read file (BAM/CRAM)
  --hq \  # If using PacBio HiFi or ONT duplex reads, enable this to get better genotyping & more robust expansion detection
  --realign \  # If using PacBio HiFi reads, enable this to enable local realignment / read recovery. Good for detecting expansions, but slows down calling.
  --ref path/to/reference.fa.gz \  # [REQUIRED] Indexed FASTA-formatted reference genome
  --loci path/to/loci.bed \  # [REQUIRED] TRF-formatted (or 4-col, with motif as last column) sorted list of loci to genotype
  --incorporate-snvs path/to/dbsnp.vcf.gz \   # [RECOMMENDED FOR HIFI ONLY] If you want SNV calls to help phase STRs & speed up calling
  --min-reads 4 \  # Minimum number of supporting reads needed to make a call
  --min-allele-reads 2 \  # Minimum number of supporting reads needed to call a specific allele size 
  --flank-size 70 \  # Size of the flanking region to use on either side of a region to properly anchor reads
  --consensus \  # If this flag is set, consensus sequences are calculated for alleles. This increases runtime! 
  --seed 183 \  # Fixed random number generator seed for replicability
  --processes 10  # Number of parallel processes to use; DEFAULT: 1
```

Ideally, you should be using a read file aligned with parameters tuned for tandem repeats. 
PacBio provides a 
[recommended workflow](https://github.com/PacificBiosciences/apps-scripts/tree/master/RepeatAnalysisTools)
for CCS alignment in this scenario.

If you're using HiFi reads as input, **use the `--hq` and `--realign` options** to get better 
genotype calculation and a greater proportion of reads incorporated into the computed genotypes, 
respectively. These should not add much performance overhead.

If you want to **incorporate haplotagging from an alignment file (`HP` tags)** into the 
process, which should speed up runtime and potentially improve calling results, you must pass 
the `--use-hp` flag. **This flag is experimental, and has not been tested extensively.**

If you want to **incorporate SNV calling** into the process, which speeds up runtime and gives
marginally better calling results, you must provide an indexed, `bgzip`-compressed SNV catalog 
VCF which matches your reference genome. You can find dbSNP VCFs at
[`https://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/`](https://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/).
The file for GRCh38 is called `00-common_all.vcf.gz` as of time of writing.
**Note that this does not need to be an SNV call file for your sample, specifically**; just one 
which has positions, reference/alternate alleles, and the `ID` field populated.

If you want to output a full call report, you can use the `--json output-file.json` argument to
specify a path to output a more detailed JSON document to. This document contains 99% CIs, peak
labels, and some other information that isn't included in the normal TSV file. If you want this
file to be indented and human-readable, use the `--indent-json` flag in addition to `--json ...`.

If you want to output a VCF file (STRs and SNVs if called; currently not phased), use the
`--vcf ...` argument. If you pass `--vcf stdout`, the VCF will be written to `stdout` instead of a 
file.

See the '[Caller catalog format & choosing a catalog](./docs/caller_catalog.md)' page for more on
how to format a locus catalog or choose from existing available catalogs.

Note that the reference genome must be BGZipped and indexed using `samtools faidx`:

```bash
# Starting from a .fa:
bgzip my-reference.fa  # Replaces .fa with a .fa.gz file
samtools faidx my-reference.fa.gz  # Generates a .fai index file
```


#### Further documentation on the STRkit caller, including output format:

  * [Advanced caller usage and configuration](./docs/caller_usage.md)
  * [Caller catalog format & choosing a catalog](./docs/caller_catalog.md)
  * [Output formats](./docs/output_formats.md)


### `strkit visualize`: Call visualizer

STRkit bundles a call visualization tool which takes as input a BAM file and
a JSON call file from using the `--json` flag with `strkit call`.

It starts a web server on your local machine; the visualizations can be 
interacted with in a web browser.

To use the tool, run the following command:

```bash
strkit visualize path/to/my-alignment.bam \ 
  --ref hg38 \  # or hg19
  --json path/to/my-calls.json \
  -i 1  # 1-indexed offset in JSON file for locus of interest. Default is 1 if left out.
```

This will output something like the following:

```
 * Serving Flask app 'strkit.viz.server' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://localhost:5011 (Press CTRL+C to quit)
...
```

You can then go to the URL listed, `http://localhost:5011`, on your local machine
to see the visualization tool:

![Browser Histogram](./docs/images/browser_hist.png)
*STRkit browser histogram, showing an expansion in the HTT gene.*

![igv.js Genome Browser](./docs/images/browser_igv.png)
*The same expansion, shown in the igv.js browser. Note the insertions on
the left-hand side in most reads, and the heterozygous copy number pattern.*

To exit the tool, press `Ctrl-C` in your command line window as mentioned in 
the start-up instructions.



### `strkit mi`: Mendelian inheritance analysis

Using trio data, candidate de novo STR mutations (or genotyping errors/dropout rates) can be discovered 
by looking at inheritance patterns. This tool provides a few different ways to do this, via:

* Mendelian inheritance % (MI) calculations for many common TR genotyping tools for both long/short reads, 
  including support for genotyping methods which report confidence intervals.
* Reports of loci (potentially of interest) which do not respect MI
* An optional test flag to detect de novo events and assign a p-value in trio JSON reports generated by 
  `strkit call`. Note that **this currently will over-report significance with low coverage** as tested with the 
  `x2` chi-squared test option.

**For more information on what kind of analyses can be done with this data**, see the
[Trio analyses with STRkit](./docs/trio_analyses.md) page.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/davidlougheed/strkit",
    "name": "strkit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "~=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "David Lougheed",
    "author_email": "david.lougheed@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/30/b3/025250c8567d2493c9e47119e75804bee90edcb220b16acdd12781928559/strkit-0.20.0.tar.gz",
    "platform": null,
    "description": "# STRkit - short tandem repeat genotyping with long reads\n\n[![PyPI version](https://badge.fury.io/py/strkit.svg)](https://badge.fury.io/py/strkit)\n[![Zenodo DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.12689906.svg)](https://doi.org/10.5281/zenodo.12689906)\n\nSTRkit is a short tandem repeat (STR) genotyping and analysis toolkit for long read sequencing data, especially \nPacBio HiFi data. The STRkit software package is written in Python and is available in the PyPI package registry or as\na Docker container.\n\nIf you use STRkit in published work in its current state, please cite the version you use via \n[Zenodo DOI](https://zenodo.org/records/12689906).\n\n<img src=\"./docs/images/strkit_logo_small.png\" alt=\"\" width=\"500\" height=\"324\" />\n\n\n## Copyright and License\n\n* 2021-2023: &copy; David Lougheed (DL) and McGill University 2021-2023 (versions up to and including `0.8.0a1`), \n  created during graduate research by DL.\n* 2023+: (versions beyond `0.8.0a1`):\n  * Portions &copy; DL and McGill University 2021-2023\n  * Portions &copy; McGill University 2024\n  * Portions &copy; DL 2024\n\n\n### Notice\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 <https://www.gnu.org/licenses/>.\n\n### Exceptions\n\n**Some exclusions to this license apply; specifically portions of \n[`strkit/viz/templates/browser.html`](strkit/viz/templates/browser.html) and\nthe STRkit logo files ([./docs/images/strkit_logo_small.png](./docs/images/strkit_logo_small.png)\nand [./strkit/viz/static/logo.png](./strkit/viz/static/logo.png).)**\n\nThe STRkit logo is &copy; David Lougheed 2022, and was designed by Evelyn Lougheed. It is not licensed\nunder the terms of the GPL 3.0; it is instead licensed under the terms of the \n[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/).\n\nPortions of `viz/templates/browser.html` copyright (C) 2021-2022  Observable, Inc.\nUsed under the terms of the ISC license.\n\n\n## Installation\n\n### Via PyPI\n\nSTRkit requires Python 3.10+ and can be installed from PyPI via `pip` \nwith the following command:\n\n```bash\npython -m pip install strkit\n```\n\nYou may need to install the [Rust toolchain](https://www.rust-lang.org/tools/install)\nto compile the `strkit_rust_ext` wheel, although prebuilt wheels for this module are available\nfor some platforms. Compiling the wheel may take quite a long time (in the tens of minutes).\n\nOn Digital Research Alliance of Canada/Compute Canada clusters, this involves loading a few modules:\n\n```bash\nmodule load rust/1.76.0 clang/17.0.6 python/3.11 scipy-stack/2023b parasail/2.6.2\npython -m pip install strkit\n```\n\nSTRkit should then be available in your Python environment as a command-line tool:\n\n```bash\nstrkit --help\n```\n\n### As a Docker container\n\nSTRkit is also available as a [Docker container](https://github.com/davidlougheed/strkit/pkgs/container/strkit), stored \nin the GitHub Container Registry.\n\nIt can be pulled using the following command:\n\n```bash\ndocker pull ghcr.io/davidlougheed/strkit:latest\n```\n\nThen, STRkit commands can be run mostly as normal using the Docker image:\n\n```bash\ndocker run -it ghcr.io/davidlougheed/strkit --help\n```\n\n\n## Commands\n\n### `strkit call`: Genotype caller with bootstrapped confidence intervals\n\nA Gaussian mixture model tandem repeat genotype caller for long read data.\nSTRkit is tuned specifically for high-fidelity long reads, although other \nlong read data should still work.\n\n![Calling approach flow chart](./docs/images/call_method_flow.png)\n\n#### Features:\n\n* Performant, vectorized (thanks to [parasail](https://github.com/jeffdaily/parasail))\n  estimates of repeat counts from high-fidelity long reads and a supplied \n  catalog of TR loci and motifs.\n* Re-weighting of longer reads, to compensate for their lower likelihood of observation.\n  * Whole-genome and targeted genotyping modes to adjust this re-weighting.\n* Incorporation of single-nucleotide variation (SNVs) for better and faster calling plus \n  additional downstream analysis possibilities.\n  * Recommended for **HiFi data and ONT R10 data only**. In my testing, this worsens runtime and call quality for \n    ONT ultra-long-read data, but speeds up the tool and improves call quality for HiFi/ONT R10 data. \n* Parallelized for faster computing on clusters and for ad-hoc fast analysis of single samples.\n* 95% confidence intervals on calls via a user-configurable optional parametric bootstrapping process.\n\n\n#### Usage: *(see all parameters: [Advanced caller usage and configuration](./docs/caller_usage.md))*\n\n```bash\nstrkit call \\\n  path/to/read/file.bam \\  # [REQUIRED] One indexed read file (BAM/CRAM)\n  --hq \\  # If using PacBio HiFi or ONT duplex reads, enable this to get better genotyping & more robust expansion detection\n  --realign \\  # If using PacBio HiFi reads, enable this to enable local realignment / read recovery. Good for detecting expansions, but slows down calling.\n  --ref path/to/reference.fa.gz \\  # [REQUIRED] Indexed FASTA-formatted reference genome\n  --loci path/to/loci.bed \\  # [REQUIRED] TRF-formatted (or 4-col, with motif as last column) sorted list of loci to genotype\n  --incorporate-snvs path/to/dbsnp.vcf.gz \\   # [RECOMMENDED FOR HIFI ONLY] If you want SNV calls to help phase STRs & speed up calling\n  --min-reads 4 \\  # Minimum number of supporting reads needed to make a call\n  --min-allele-reads 2 \\  # Minimum number of supporting reads needed to call a specific allele size \n  --flank-size 70 \\  # Size of the flanking region to use on either side of a region to properly anchor reads\n  --consensus \\  # If this flag is set, consensus sequences are calculated for alleles. This increases runtime! \n  --seed 183 \\  # Fixed random number generator seed for replicability\n  --processes 10  # Number of parallel processes to use; DEFAULT: 1\n```\n\nIdeally, you should be using a read file aligned with parameters tuned for tandem repeats. \nPacBio provides a \n[recommended workflow](https://github.com/PacificBiosciences/apps-scripts/tree/master/RepeatAnalysisTools)\nfor CCS alignment in this scenario.\n\nIf you're using HiFi reads as input, **use the `--hq` and `--realign` options** to get better \ngenotype calculation and a greater proportion of reads incorporated into the computed genotypes, \nrespectively. These should not add much performance overhead.\n\nIf you want to **incorporate haplotagging from an alignment file (`HP` tags)** into the \nprocess, which should speed up runtime and potentially improve calling results, you must pass \nthe `--use-hp` flag. **This flag is experimental, and has not been tested extensively.**\n\nIf you want to **incorporate SNV calling** into the process, which speeds up runtime and gives\nmarginally better calling results, you must provide an indexed, `bgzip`-compressed SNV catalog \nVCF which matches your reference genome. You can find dbSNP VCFs at\n[`https://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/`](https://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/).\nThe file for GRCh38 is called `00-common_all.vcf.gz` as of time of writing.\n**Note that this does not need to be an SNV call file for your sample, specifically**; just one \nwhich has positions, reference/alternate alleles, and the `ID` field populated.\n\nIf you want to output a full call report, you can use the `--json output-file.json` argument to\nspecify a path to output a more detailed JSON document to. This document contains 99% CIs, peak\nlabels, and some other information that isn't included in the normal TSV file. If you want this\nfile to be indented and human-readable, use the `--indent-json` flag in addition to `--json ...`.\n\nIf you want to output a VCF file (STRs and SNVs if called; currently not phased), use the\n`--vcf ...` argument. If you pass `--vcf stdout`, the VCF will be written to `stdout` instead of a \nfile.\n\nSee the '[Caller catalog format & choosing a catalog](./docs/caller_catalog.md)' page for more on\nhow to format a locus catalog or choose from existing available catalogs.\n\nNote that the reference genome must be BGZipped and indexed using `samtools faidx`:\n\n```bash\n# Starting from a .fa:\nbgzip my-reference.fa  # Replaces .fa with a .fa.gz file\nsamtools faidx my-reference.fa.gz  # Generates a .fai index file\n```\n\n\n#### Further documentation on the STRkit caller, including output format:\n\n  * [Advanced caller usage and configuration](./docs/caller_usage.md)\n  * [Caller catalog format & choosing a catalog](./docs/caller_catalog.md)\n  * [Output formats](./docs/output_formats.md)\n\n\n### `strkit visualize`: Call visualizer\n\nSTRkit bundles a call visualization tool which takes as input a BAM file and\na JSON call file from using the `--json` flag with `strkit call`.\n\nIt starts a web server on your local machine; the visualizations can be \ninteracted with in a web browser.\n\nTo use the tool, run the following command:\n\n```bash\nstrkit visualize path/to/my-alignment.bam \\ \n  --ref hg38 \\  # or hg19\n  --json path/to/my-calls.json \\\n  -i 1  # 1-indexed offset in JSON file for locus of interest. Default is 1 if left out.\n```\n\nThis will output something like the following:\n\n```\n * Serving Flask app 'strkit.viz.server' (lazy loading)\n * Environment: production\n   WARNING: This is a development server. Do not use it in a production deployment.\n   Use a production WSGI server instead.\n * Debug mode: on\n * Running on http://localhost:5011 (Press CTRL+C to quit)\n...\n```\n\nYou can then go to the URL listed, `http://localhost:5011`, on your local machine\nto see the visualization tool:\n\n![Browser Histogram](./docs/images/browser_hist.png)\n*STRkit browser histogram, showing an expansion in the HTT gene.*\n\n![igv.js Genome Browser](./docs/images/browser_igv.png)\n*The same expansion, shown in the igv.js browser. Note the insertions on\nthe left-hand side in most reads, and the heterozygous copy number pattern.*\n\nTo exit the tool, press `Ctrl-C` in your command line window as mentioned in \nthe start-up instructions.\n\n\n\n### `strkit mi`: Mendelian inheritance analysis\n\nUsing trio data, candidate de novo STR mutations (or genotyping errors/dropout rates) can be discovered \nby looking at inheritance patterns. This tool provides a few different ways to do this, via:\n\n* Mendelian inheritance % (MI) calculations for many common TR genotyping tools for both long/short reads, \n  including support for genotyping methods which report confidence intervals.\n* Reports of loci (potentially of interest) which do not respect MI\n* An optional test flag to detect de novo events and assign a p-value in trio JSON reports generated by \n  `strkit call`. Note that **this currently will over-report significance with low coverage** as tested with the \n  `x2` chi-squared test option.\n\n**For more information on what kind of analyses can be done with this data**, see the\n[Trio analyses with STRkit](./docs/trio_analyses.md) page.\n",
    "bugtrack_url": null,
    "license": "GPLv3",
    "summary": "A toolkit for analyzing variation in short(ish) tandem repeats.",
    "version": "0.20.0",
    "project_urls": {
        "Homepage": "https://github.com/davidlougheed/strkit"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2ee40e52156d6c118cafe834d557a8c3b0c22cf11f8b7187eebc51ec54df3b09",
                "md5": "e5446d5f75f2da54a2af4584f2e5a04a",
                "sha256": "38d73d901a38b4f16f5a91cde0722486ee9b4c7252388f69d4f85b9616384253"
            },
            "downloads": -1,
            "filename": "strkit-0.20.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e5446d5f75f2da54a2af4584f2e5a04a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "~=3.10",
            "size": 349650,
            "upload_time": "2025-01-06T21:29:25",
            "upload_time_iso_8601": "2025-01-06T21:29:25.143985Z",
            "url": "https://files.pythonhosted.org/packages/2e/e4/0e52156d6c118cafe834d557a8c3b0c22cf11f8b7187eebc51ec54df3b09/strkit-0.20.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "30b3025250c8567d2493c9e47119e75804bee90edcb220b16acdd12781928559",
                "md5": "ae3cfb15e264de1829a58c1d5172628a",
                "sha256": "232b831052703132218cb43681ea6fe76cb7fb31f3413c6d4591183edfad89ca"
            },
            "downloads": -1,
            "filename": "strkit-0.20.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ae3cfb15e264de1829a58c1d5172628a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "~=3.10",
            "size": 338860,
            "upload_time": "2025-01-06T21:29:27",
            "upload_time_iso_8601": "2025-01-06T21:29:27.621854Z",
            "url": "https://files.pythonhosted.org/packages/30/b3/025250c8567d2493c9e47119e75804bee90edcb220b16acdd12781928559/strkit-0.20.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-06 21:29:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "davidlougheed",
    "github_project": "strkit",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "blinker",
            "specs": [
                [
                    "==",
                    "1.7.0"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.1.7"
                ]
            ]
        },
        {
            "name": "coverage",
            "specs": [
                [
                    "==",
                    "7.4.1"
                ]
            ]
        },
        {
            "name": "Cython",
            "specs": [
                [
                    "==",
                    "3.0.8"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "Flask",
            "specs": [
                [
                    "==",
                    "3.0.3"
                ]
            ]
        },
        {
            "name": "importlib_metadata",
            "specs": [
                [
                    "==",
                    "7.1.0"
                ]
            ]
        },
        {
            "name": "iniconfig",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "itsdangerous",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.1.4"
                ]
            ]
        },
        {
            "name": "joblib",
            "specs": [
                [
                    "==",
                    "1.3.2"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "2.1.5"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "orjson",
            "specs": [
                [
                    "==",
                    "3.10.7"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "parasail",
            "specs": [
                [
                    "==",
                    "1.3.4"
                ]
            ]
        },
        {
            "name": "patsy",
            "specs": [
                [
                    "==",
                    "0.5.6"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "pysam",
            "specs": [
                [
                    "==",
                    "0.22.1"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "7.4.4"
                ]
            ]
        },
        {
            "name": "pytest-cov",
            "specs": [
                [
                    "==",
                    "4.1.0"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.8.2"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "scikit-learn",
            "specs": [
                [
                    "==",
                    "1.4.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.13.1"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "statsmodels",
            "specs": [
                [
                    "==",
                    "0.14.3"
                ]
            ]
        },
        {
            "name": "strkit_rust_ext",
            "specs": [
                [
                    "==",
                    "0.19.0"
                ]
            ]
        },
        {
            "name": "threadpoolctl",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "tomli",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2024.2"
                ]
            ]
        },
        {
            "name": "Werkzeug",
            "specs": [
                [
                    "==",
                    "3.0.4"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.20.2"
                ]
            ]
        }
    ],
    "lcname": "strkit"
}
        
Elapsed time: 0.44125s