warpkit


Namewarpkit JSON
Version 0.1.1 PyPI version JSON
download
home_page
SummaryA python library for neuroimaging transformations
upload_time2023-12-08 08:08:13
maintainer
docs_urlNone
author
requires_python>=3.8
license
keywords neuroimaging
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # warpkit
![Build](https://github.com/vanandrew/warpkit/actions/workflows/build.yml/badge.svg)
![PyPI](https://img.shields.io/pypi/v/warpkit)
![docker](https://ghcr-badge.egpl.dev/vanandrew/warpkit/latest_tag?trim=major&label=ghcr latest)

A python library for neuroimaging transforms

If you've landed here, you're probably interested in the Multi-Echo DIstortion Correction (MEDIC) algorithm, which this
library implements.

You can find the pre-print for MEDIC here: https://www.biorxiv.org/content/10.1101/2023.11.28.568744v1.

See below for usage details.

## Installation

### Julia

`warpkit` requires `julia` installed on your system ensure that you have the `julia` executable in your path, and
the `julia` libraries correctly setup in your `ld.so.conf`. See the below instructions for both Linux and macOS.

#### Linux

If you installed julia via a package manager, library configuration should be done for you (most of the time) already.
However, if you installed Julia manually, you may need to tell `ldconfig` where the julia libraries are. For example,
on debian based systems you can do this with:

```bash
# /path to julia installation (the lib folder will have libjulia.so)
echo /path/to/julia/lib > /etc/ld.so.conf.d/julia.conf
ldconfig
```

If you have done this correctly, you should see `libjulia.so` in your ldconfig:

```bash
ldconfig -p | grep julia                                                                                        
	libjulia.so.1 (libc6,x86-64) => /usr/lib/libjulia.so.1
	libjulia.so (libc6,x86-64) => /usr/lib/libjulia.so
```

The above may require root privileges. The alternative to the above is to set the `LD_LIBRARY_PATH` environment
variable to the path of the julia libraries.

```bash
# /path to julia installation (the lib folder will have libjulia.so)
export LD_LIBRARY_PATH=/path/to/julia/lib:$LD_LIBRARY_PATH
```

Note however, that you must type the above each time you open a new terminal. To make this permanent, you can add the
above line to your shell's profile file.

#### macOS

If you installed julia through `brew`, this should be done for you already.

However, if you get an error saying that `libjulia` cannot be found, you may need to add the julia libraries via your
`DYLD_LIBRARY_PATH` environment variable. For example, if you installed julia to `/Applications/Julia-1.6.app`, you
would add the following to your shell's profile file:

```bash
export DYLD_LIBRARY_PATH=/Applications/Julia-1.6.app/Contents/Resources/julia/lib:$DYLD_LIBRARY_PATH
```

### Installing through pip

Assuming you have `julia` installed and configured correctly, you can install `warpkit` through `pip`:

```bash
pip install warpkit
```

If you encounter any errors during the installation process, please report them to the issue tracker with the logs
reported from `pip install warpkit -v`.

### Installing through conda

Another way to install `warpkit` is through a `conda` environment. Currently, `warpkit` is not uploaded to any
`conda` channels, so you will need to build it from source (Looking for help on this
[issue](https://github.com/vanandrew/warpkit/issues/6)).

> [!NOTE]
> **For advanced users only**
> A `meta.yaml` file is present in the `conda` folder in the root of the repo. If you are familiar with `conda-build`
> you should be able to build this with your existing `conda` install.

Fortunately, there is an automated script that will download `micromamba` (a `conda` variant), create a new
environment, and build/install `warpkit` for you automagically. To do this, clone this repo and run the following:

```bash
# switch to conda directory in repo
cd conda
# run the install script (use -p or --path to specify an install prefix)
# by default this is set to ~/micromamba
./warpkit-conda-install.sh

# in your shell profile add the following lines
# or just execute them in your current shell
# but it won't be permanent
export MAMBA_ROOT_PREFIX=/whatever/path/you/installed/micromamba/prefix/above
eval "$(/whatever/path/you/installed/micromamba/prefix/above/bin/micromamba shell hook -s posix)"

# if you added the above to your profile
# restart your shell then activate the environment
#
# unless you have already executed the above in your current shell
# then you don't need to restart it and can just activate the environment
micromamba activate base

# you should now be able to import/use warpkit
python -c "import warpkit"  # should return no errors
medic --help  # should return help
```

After installing and configuring everything, you must type `micromamba activate base` each time you open a new terminal
to get back into the `conda` environment to use `warpkit`. To make this permanent, you can add the above line to your
shell's profile file.

### Installing through docker

If you are familiar with `docker`, you can also install `warpkit` through a `docker` container.

```bash
docker run -it --rm ghcr.io/vanandrew/warpkit:latest
```

Note that the default entrypoint is the `medic` CLI script, so you can run `medic --help` to get the help message.

### Building and installing from source

To build and install from source, clone this repo and run the following in the repo directory.
I highly recommend installing it in editable mode (with the strict option, see
[here](https://setuptools.pypa.io/en/latest/userguide/development_mode.html#strict-editable-installs)):

```
pip install -e ./[dev] -v --config-settings editable_mode=strict
```
You will need a C++ compiler with C++17 support, as well as Julia pre-installed on your system. See the [Julia](#julia)
section for more details.

The build process uses CMake to build the C++/Python Extension. If you encounter an error during the build process,
please report the full logs of the build process using the `-v` flag to the `pip` command above. 

## What is MEDIC?

MEDIC takes your ME-EPI phase data from this:

![phase](notes/phase.png)

to this:

![field map](notes/fmap.png)

for each frame of your data. You can then use these field maps to distortion correct your data.

## MEDIC Usage
The `warpkit` library is meant for integration into a larger neuroimaging pipeline/software package.

An example of how to call MEDIC from python is provided below:
```python
import nibabel as nib
from warpkit.distortion import medic
from warpkit.utilities import displacement_map_to_warp

# load phase and magnitude images into lists
# each element in list is a different echo
phases = [nib.load(p) for p in phases_paths]
magnitudes = [nib.load(p) for p in magnitude_paths]
TEs = [TE1, TE2, ...] # in milliseconds
effective_echo_spacing = ... # in seconds
phase_encoding_direction = either i, j, k, i-, j-, k-, x , y, z, x-, y-, z- 

# call the medic function
field_maps_native, displacement_maps, field_maps = medic(
    phases, magnitudes, TEs, effective_echo_spacing, phase_encoding_direction)

# field_maps_native are returned in the distorted space (Hz) (mainly for reference/debugging purposes)
# you shouldn't need to use these probably???
# displacement_maps are returned in the undistorted space (mm) (see below for usage)
# field_maps are returned in the undistorted space (Hz) (same field map output as topup/fugue, but framewise)

# returns are nibabel Nifti1Image objects, so they can be saved to file by:

# displacement_maps to file
displacement_maps.to_filename("/path/to/save.nii.gz")

# these should be converted to displacement fields
# by the displacement_map_to_field function
# and specifying the appropriate type (i.e. itk, ants, afni, fsl)

displacement_field = displacement_map_to_field(displacement_maps, axis="y", format="itk", frame=0)

# where axis specifies the phase encoding direction, format is the desired output format, and frame is the index of
# displacement map to convert to a displacement field

# the displacement field can then be saved to file by the to_filename method
# Each file can be applied with the respective software's displacement field application tool:
# itk: the internal format warpkit uses. See utilities.resample_image
# ants: antsApplyTransforms (note that even though ants also uses itk, warpkit's itk warp format is NOT equivalent)
# afni: 3dNwarpApply
# fsl: applywarp

# if you are using fsl and instead want to use fugue to distortion correction, you can use the field_maps outputs
# (these are the equivalent field maps of that you would get from fugue, but with multiple frames)
```

You can also use the provided CLI script `medic` to run MEDIC from the command line. The script is installed to your
`PATH` when you install the package. `medic` takes the following arguments:

```bash
usage: medic [-h] --magnitude MAGNITUDE [MAGNITUDE ...] --phase PHASE
             [PHASE ...] --metadata METADATA [METADATA ...]
             [--out_prefix OUT_PREFIX] [-f NOISEFRAMES] [-n N_CPUS]
             [--debug] [--wrap_limit]

Multi-Echo DIstortion Correction

options:
  -h, --help            show this help message and exit
  --magnitude MAGNITUDE [MAGNITUDE ...]
                        Magnitude data
  --phase PHASE [PHASE ...]
                        Phase data
  --metadata METADATA [METADATA ...]
                        JSON sidecar for each echo
  --out_prefix OUT_PREFIX
                        Prefix to output field maps and displacment maps.
  -f NOISEFRAMES, --noiseframes NOISEFRAMES
                        Number of noise frames
  -n N_CPUS, --n_cpus N_CPUS
                        Number of CPUs to use.
  --debug               Debug mode
  --wrap_limit          Turns off some heuristics for phase unwrapping

Vahdeta Suljic <suljic@wustl.edu>, Andrew Van <vanandrew@wustl.edu>
12/09/2022
```

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "warpkit",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "neuroimaging",
    "author": "",
    "author_email": "Andrew Van <vanandrew@wustl.edu>",
    "download_url": "https://files.pythonhosted.org/packages/c6/cf/e66ff329cc01f6ea3a026f1388295fbfb8758f72aa64ba3a21fc370857dd/warpkit-0.1.1.tar.gz",
    "platform": null,
    "description": "# warpkit\n![Build](https://github.com/vanandrew/warpkit/actions/workflows/build.yml/badge.svg)\n![PyPI](https://img.shields.io/pypi/v/warpkit)\n![docker](https://ghcr-badge.egpl.dev/vanandrew/warpkit/latest_tag?trim=major&label=ghcr&nbsp;latest)\n\nA python library for neuroimaging transforms\n\nIf you've landed here, you're probably interested in the Multi-Echo DIstortion Correction (MEDIC) algorithm, which this\nlibrary implements.\n\nYou can find the pre-print for MEDIC here: https://www.biorxiv.org/content/10.1101/2023.11.28.568744v1.\n\nSee below for usage details.\n\n## Installation\n\n### Julia\n\n`warpkit` requires `julia` installed on your system ensure that you have the `julia` executable in your path, and\nthe `julia` libraries correctly setup in your `ld.so.conf`. See the below instructions for both Linux and macOS.\n\n#### Linux\n\nIf you installed julia via a package manager, library configuration should be done for you (most of the time) already.\nHowever, if you installed Julia manually, you may need to tell `ldconfig` where the julia libraries are. For example,\non debian based systems you can do this with:\n\n```bash\n# /path to julia installation (the lib folder will have libjulia.so)\necho /path/to/julia/lib > /etc/ld.so.conf.d/julia.conf\nldconfig\n```\n\nIf you have done this correctly, you should see `libjulia.so` in your ldconfig:\n\n```bash\nldconfig -p | grep julia                                                                                        \n\tlibjulia.so.1 (libc6,x86-64) => /usr/lib/libjulia.so.1\n\tlibjulia.so (libc6,x86-64) => /usr/lib/libjulia.so\n```\n\nThe above may require root privileges. The alternative to the above is to set the `LD_LIBRARY_PATH` environment\nvariable to the path of the julia libraries.\n\n```bash\n# /path to julia installation (the lib folder will have libjulia.so)\nexport LD_LIBRARY_PATH=/path/to/julia/lib:$LD_LIBRARY_PATH\n```\n\nNote however, that you must type the above each time you open a new terminal. To make this permanent, you can add the\nabove line to your shell's profile file.\n\n#### macOS\n\nIf you installed julia through `brew`, this should be done for you already.\n\nHowever, if you get an error saying that `libjulia` cannot be found, you may need to add the julia libraries via your\n`DYLD_LIBRARY_PATH` environment variable. For example, if you installed julia to `/Applications/Julia-1.6.app`, you\nwould add the following to your shell's profile file:\n\n```bash\nexport DYLD_LIBRARY_PATH=/Applications/Julia-1.6.app/Contents/Resources/julia/lib:$DYLD_LIBRARY_PATH\n```\n\n### Installing through pip\n\nAssuming you have `julia` installed and configured correctly, you can install `warpkit` through `pip`:\n\n```bash\npip install warpkit\n```\n\nIf you encounter any errors during the installation process, please report them to the issue tracker with the logs\nreported from `pip install warpkit -v`.\n\n### Installing through conda\n\nAnother way to install `warpkit` is through a `conda` environment. Currently, `warpkit` is not uploaded to any\n`conda` channels, so you will need to build it from source (Looking for help on this\n[issue](https://github.com/vanandrew/warpkit/issues/6)).\n\n> [!NOTE]\n> **For advanced users only**\n> A `meta.yaml` file is present in the `conda` folder in the root of the repo. If you are familiar with `conda-build`\n> you should be able to build this with your existing `conda` install.\n\nFortunately, there is an automated script that will download `micromamba` (a `conda` variant), create a new\nenvironment, and build/install `warpkit` for you automagically. To do this, clone this repo and run the following:\n\n```bash\n# switch to conda directory in repo\ncd conda\n# run the install script (use -p or --path to specify an install prefix)\n# by default this is set to ~/micromamba\n./warpkit-conda-install.sh\n\n# in your shell profile add the following lines\n# or just execute them in your current shell\n# but it won't be permanent\nexport MAMBA_ROOT_PREFIX=/whatever/path/you/installed/micromamba/prefix/above\neval \"$(/whatever/path/you/installed/micromamba/prefix/above/bin/micromamba shell hook -s posix)\"\n\n# if you added the above to your profile\n# restart your shell then activate the environment\n#\n# unless you have already executed the above in your current shell\n# then you don't need to restart it and can just activate the environment\nmicromamba activate base\n\n# you should now be able to import/use warpkit\npython -c \"import warpkit\"  # should return no errors\nmedic --help  # should return help\n```\n\nAfter installing and configuring everything, you must type `micromamba activate base` each time you open a new terminal\nto get back into the `conda` environment to use `warpkit`. To make this permanent, you can add the above line to your\nshell's profile file.\n\n### Installing through docker\n\nIf you are familiar with `docker`, you can also install `warpkit` through a `docker` container.\n\n```bash\ndocker run -it --rm ghcr.io/vanandrew/warpkit:latest\n```\n\nNote that the default entrypoint is the `medic` CLI script, so you can run `medic --help` to get the help message.\n\n### Building and installing from source\n\nTo build and install from source, clone this repo and run the following in the repo directory.\nI highly recommend installing it in editable mode (with the strict option, see\n[here](https://setuptools.pypa.io/en/latest/userguide/development_mode.html#strict-editable-installs)):\n\n```\npip install -e ./[dev] -v --config-settings editable_mode=strict\n```\nYou will need a C++ compiler with C++17 support, as well as Julia pre-installed on your system. See the [Julia](#julia)\nsection for more details.\n\nThe build process uses CMake to build the C++/Python Extension. If you encounter an error during the build process,\nplease report the full logs of the build process using the `-v` flag to the `pip` command above. \n\n## What is MEDIC?\n\nMEDIC takes your ME-EPI phase data from this:\n\n![phase](notes/phase.png)\n\nto this:\n\n![field map](notes/fmap.png)\n\nfor each frame of your data. You can then use these field maps to distortion correct your data.\n\n## MEDIC Usage\nThe `warpkit` library is meant for integration into a larger neuroimaging pipeline/software package.\n\nAn example of how to call MEDIC from python is provided below:\n```python\nimport nibabel as nib\nfrom warpkit.distortion import medic\nfrom warpkit.utilities import displacement_map_to_warp\n\n# load phase and magnitude images into lists\n# each element in list is a different echo\nphases = [nib.load(p) for p in phases_paths]\nmagnitudes = [nib.load(p) for p in magnitude_paths]\nTEs = [TE1, TE2, ...] # in milliseconds\neffective_echo_spacing = ... # in seconds\nphase_encoding_direction = either i, j, k, i-, j-, k-, x , y, z, x-, y-, z- \n\n# call the medic function\nfield_maps_native, displacement_maps, field_maps = medic(\n    phases, magnitudes, TEs, effective_echo_spacing, phase_encoding_direction)\n\n# field_maps_native are returned in the distorted space (Hz) (mainly for reference/debugging purposes)\n# you shouldn't need to use these probably???\n# displacement_maps are returned in the undistorted space (mm) (see below for usage)\n# field_maps are returned in the undistorted space (Hz) (same field map output as topup/fugue, but framewise)\n\n# returns are nibabel Nifti1Image objects, so they can be saved to file by:\n\n# displacement_maps to file\ndisplacement_maps.to_filename(\"/path/to/save.nii.gz\")\n\n# these should be converted to displacement fields\n# by the displacement_map_to_field function\n# and specifying the appropriate type (i.e. itk, ants, afni, fsl)\n\ndisplacement_field = displacement_map_to_field(displacement_maps, axis=\"y\", format=\"itk\", frame=0)\n\n# where axis specifies the phase encoding direction, format is the desired output format, and frame is the index of\n# displacement map to convert to a displacement field\n\n# the displacement field can then be saved to file by the to_filename method\n# Each file can be applied with the respective software's displacement field application tool:\n# itk: the internal format warpkit uses. See utilities.resample_image\n# ants: antsApplyTransforms (note that even though ants also uses itk, warpkit's itk warp format is NOT equivalent)\n# afni: 3dNwarpApply\n# fsl: applywarp\n\n# if you are using fsl and instead want to use fugue to distortion correction, you can use the field_maps outputs\n# (these are the equivalent field maps of that you would get from fugue, but with multiple frames)\n```\n\nYou can also use the provided CLI script `medic` to run MEDIC from the command line. The script is installed to your\n`PATH` when you install the package. `medic` takes the following arguments:\n\n```bash\nusage: medic [-h] --magnitude MAGNITUDE [MAGNITUDE ...] --phase PHASE\n             [PHASE ...] --metadata METADATA [METADATA ...]\n             [--out_prefix OUT_PREFIX] [-f NOISEFRAMES] [-n N_CPUS]\n             [--debug] [--wrap_limit]\n\nMulti-Echo DIstortion Correction\n\noptions:\n  -h, --help            show this help message and exit\n  --magnitude MAGNITUDE [MAGNITUDE ...]\n                        Magnitude data\n  --phase PHASE [PHASE ...]\n                        Phase data\n  --metadata METADATA [METADATA ...]\n                        JSON sidecar for each echo\n  --out_prefix OUT_PREFIX\n                        Prefix to output field maps and displacment maps.\n  -f NOISEFRAMES, --noiseframes NOISEFRAMES\n                        Number of noise frames\n  -n N_CPUS, --n_cpus N_CPUS\n                        Number of CPUs to use.\n  --debug               Debug mode\n  --wrap_limit          Turns off some heuristics for phase unwrapping\n\nVahdeta Suljic <suljic@wustl.edu>, Andrew Van <vanandrew@wustl.edu>\n12/09/2022\n```\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A python library for neuroimaging transformations",
    "version": "0.1.1",
    "project_urls": {
        "github": "https://github.com/vanandrew/warpkit"
    },
    "split_keywords": [
        "neuroimaging"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4c120d8d9fca8ec790501e5697945949afe97939c48d5edcc05f82afd8f4d923",
                "md5": "263b34464f2bfd8f2de5bd9821eca7c2",
                "sha256": "880f23427b7def04e55a8f58368fb0fc5c4e7bea00906ebd3d77587302fe4120"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "263b34464f2bfd8f2de5bd9821eca7c2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 2206260,
            "upload_time": "2023-12-08T08:07:54",
            "upload_time_iso_8601": "2023-12-08T08:07:54.471620Z",
            "url": "https://files.pythonhosted.org/packages/4c/12/0d8d9fca8ec790501e5697945949afe97939c48d5edcc05f82afd8f4d923/warpkit-0.1.1-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c3ba9b33bae50923d615dd022276ba503f433ded19078635e51658dfb316f47d",
                "md5": "1a20684d3672c689f14430e693615d7b",
                "sha256": "7bf2adc4725ead1b4c3ad3e5b8283be349aac31f6b02f144525eba18576babe2"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1a20684d3672c689f14430e693615d7b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1260774,
            "upload_time": "2023-12-08T08:07:56",
            "upload_time_iso_8601": "2023-12-08T08:07:56.490799Z",
            "url": "https://files.pythonhosted.org/packages/c3/ba/9b33bae50923d615dd022276ba503f433ded19078635e51658dfb316f47d/warpkit-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7f05554caebddf86f3eb7701fb74cb7c3e726edec54aaf63b7c5534415aec483",
                "md5": "cddbc7e653282989239d9c6f5f76823f",
                "sha256": "7312b41256bb8fbd8144cdb9c333245dc4a2278c1de772ddb7c98dc0b1982e91"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "cddbc7e653282989239d9c6f5f76823f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 2208423,
            "upload_time": "2023-12-08T08:07:58",
            "upload_time_iso_8601": "2023-12-08T08:07:58.495488Z",
            "url": "https://files.pythonhosted.org/packages/7f/05/554caebddf86f3eb7701fb74cb7c3e726edec54aaf63b7c5534415aec483/warpkit-0.1.1-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ca00c97877e09b25db6f62e523d52d2442b4506b8ff643b04cafe361511159e2",
                "md5": "24d3482b4ae3dc78e5faf779e5364efe",
                "sha256": "c40ef782b5cf67a249b79e1692c432c559823d8132bb346bf8960c0860593496"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "24d3482b4ae3dc78e5faf779e5364efe",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1262539,
            "upload_time": "2023-12-08T08:08:00",
            "upload_time_iso_8601": "2023-12-08T08:08:00.695014Z",
            "url": "https://files.pythonhosted.org/packages/ca/00/c97877e09b25db6f62e523d52d2442b4506b8ff643b04cafe361511159e2/warpkit-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "20d716551324bbe5d82a690cb4cc976be214df1a4c69435bd60c394b54d047f2",
                "md5": "fea80039694f3dd185e9752e4cce1778",
                "sha256": "dfbf56d4a3269549bcbbcd54386d1bdbc338365b5c55ea8867a982d622b5754b"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp312-cp312-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "fea80039694f3dd185e9752e4cce1778",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 2206736,
            "upload_time": "2023-12-08T08:08:02",
            "upload_time_iso_8601": "2023-12-08T08:08:02.707570Z",
            "url": "https://files.pythonhosted.org/packages/20/d7/16551324bbe5d82a690cb4cc976be214df1a4c69435bd60c394b54d047f2/warpkit-0.1.1-cp312-cp312-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec60905190eb699606753d768a7cde7bac9d00663f6b34e50f6bc4a1ac8851af",
                "md5": "dca90453bdfaacbff941e6113934f37b",
                "sha256": "0476fc272d508e5548a6e58fe722067ab3d5bf69bc4f39d4d71cb13025e41905"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dca90453bdfaacbff941e6113934f37b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1260785,
            "upload_time": "2023-12-08T08:08:04",
            "upload_time_iso_8601": "2023-12-08T08:08:04.431463Z",
            "url": "https://files.pythonhosted.org/packages/ec/60/905190eb699606753d768a7cde7bac9d00663f6b34e50f6bc4a1ac8851af/warpkit-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2f8d815b1dcecb82d1f778dc3df18c0d9c1331a0b3b11865920d2bd3f99d1cb",
                "md5": "d9db2a96f94a0b46017b02ec831050a2",
                "sha256": "9272ef11754b531ccde4c3d00fcb1e009d460d1aa69c76867c2bbd853a0901d4"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp38-cp38-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "d9db2a96f94a0b46017b02ec831050a2",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2206199,
            "upload_time": "2023-12-08T08:08:07",
            "upload_time_iso_8601": "2023-12-08T08:08:07.172726Z",
            "url": "https://files.pythonhosted.org/packages/b2/f8/d815b1dcecb82d1f778dc3df18c0d9c1331a0b3b11865920d2bd3f99d1cb/warpkit-0.1.1-cp38-cp38-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7fb51596adc97f035461a4628d447a69f1d063f750fb3bfdb64638dde1933ca2",
                "md5": "ac94acdaa745e19fc1fb02b0a8b6d74c",
                "sha256": "3451eeecd42af0d6e95cb4647746f6759b87d062b95f0b2460058bf4a8f4ae4d"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ac94acdaa745e19fc1fb02b0a8b6d74c",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1260214,
            "upload_time": "2023-12-08T08:08:09",
            "upload_time_iso_8601": "2023-12-08T08:08:09.060666Z",
            "url": "https://files.pythonhosted.org/packages/7f/b5/1596adc97f035461a4628d447a69f1d063f750fb3bfdb64638dde1933ca2/warpkit-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "93c54217e2a820b166c6c91379c20836f1f18982765bd443c680ecab91a85a35",
                "md5": "0cabd77df8af71f67280ef87c3169298",
                "sha256": "53240067f7746894be269ef333caa39e195bb25d44cf4c9beed9ca6867d241fd"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "0cabd77df8af71f67280ef87c3169298",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 2206383,
            "upload_time": "2023-12-08T08:08:10",
            "upload_time_iso_8601": "2023-12-08T08:08:10.404254Z",
            "url": "https://files.pythonhosted.org/packages/93/c5/4217e2a820b166c6c91379c20836f1f18982765bd443c680ecab91a85a35/warpkit-0.1.1-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "80cb021cb36b01a1d0942b7205baea1686543d70b4fa83c451e750ecaba27800",
                "md5": "f8cb070839656a26229d469005ec9131",
                "sha256": "ba5e3d5b34e24af3423cab824b1ecddf5a6d6ad2fd191cda5185b191f4586a86"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f8cb070839656a26229d469005ec9131",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1260995,
            "upload_time": "2023-12-08T08:08:11",
            "upload_time_iso_8601": "2023-12-08T08:08:11.697316Z",
            "url": "https://files.pythonhosted.org/packages/80/cb/021cb36b01a1d0942b7205baea1686543d70b4fa83c451e750ecaba27800/warpkit-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c6cfe66ff329cc01f6ea3a026f1388295fbfb8758f72aa64ba3a21fc370857dd",
                "md5": "49fca0fdc4fa1f510316c06a038d17fa",
                "sha256": "da21123d511cf3b66baffe884e13a14ecc3465066c5c6a56cbfc2fdd870c402e"
            },
            "downloads": -1,
            "filename": "warpkit-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "49fca0fdc4fa1f510316c06a038d17fa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 155405,
            "upload_time": "2023-12-08T08:08:13",
            "upload_time_iso_8601": "2023-12-08T08:08:13.597650Z",
            "url": "https://files.pythonhosted.org/packages/c6/cf/e66ff329cc01f6ea3a026f1388295fbfb8758f72aa64ba3a21fc370857dd/warpkit-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-08 08:08:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "vanandrew",
    "github_project": "warpkit",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "warpkit"
}
        
Elapsed time: 0.16644s