{ "info": { "author": "Martino Pilia", "author_email": "martino.pilia@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "disptools\n=========\nGenerate displacement fields with known volume changes\n------------------------------------------------------\n[![GitHub release](https://img.shields.io/github/release/m-pilia/disptools.svg)](https://github.com/m-pilia/disptools/releases/latest)\n[![PyPI](https://img.shields.io/pypi/v/disptools.svg)](https://pypi.python.org/pypi/disptools)\n[![Wheels](https://img.shields.io/pypi/wheel/disptools.svg)](https://pypi.org/project/disptools)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/m-pilia/disptools/blob/master/LICENSE)\n[![Appveyor](https://ci.appveyor.com/api/projects/status/github/m-pilia/disptools?svg=true)](https://www.appveyor.com/)\n\nThis library provides utilities to generate and manipulate displacement fields with known volume changes. It implements three search-based algorithms for the generation of deformation fields, along with a small collection of utility functions, and provides optional GPU acceleration through a CUDA implementation.\n\nThe three algorithms implemented are referred as:\n+ gradient: a gradient descent method (default).\n+ greedy: a greedy search method proposed in [[1]](#1).\n+ matching: a volume matching method proposed in [[2]](#2) and [[3]](#3). The implementation comes from the [PREDICT atrophysim tool](https://www.nitrc.org/projects/atrophysim).\n\nThe library is built on top of SimpleITK, in order to provide a simple yet powerful set of functionalities for image analysis. Images stored as numpy arrays can be easily converted from and to [SimpleITK](http://simpleitk.github.io/SimpleITK-Notebooks/01_Image_Basics.html) and [ITK](https://blog.kitware.com/convert-itk-data-structures-to-numpy-arrays/) image objects.\n\n### Documentation\n\nThe complete documentation for this package is available on https://martinopilia.com/disptools.\n\n### Quick example\n```python\nimport SimpleITK as sitk\nimport disptools.displacements as dsp\nimport disptools.drawing as drw\n\n# Create an example Jacobian map\n# A spherical ROI with a Jacobian of 1.1 (expansion)\njacobian = drw.create_sphere(10, 40, fg_val=1.1, bg_val=1.0)\n\n# Create a binary mask for the ROI\nmask = drw.create_sphere(10, 40) > 0\n\n# Generate the displacement\ndisplacement = dsp.displacement(jacobian, mask=mask)\n\n# Check the correctness of the result within the ROI\nerror = jacobian - dsp.jacobian(displacement)\nerror = sitk.Mask(error, mask)\n```\n\nA 3D rendering of the resulting displacement field with [ParaView](https://www.paraview.org/), and a visualisation of the the error on the Jacobian within the ROI:\n\n\"displacement\" \"error\"\n\n### Architecture\n\nThe project is structured in three layers:\n+ a pure standard [C99](https://en.wikipedia.org/wiki/C99) library (whose headers are in src/headers), with no external dependencies, implementing the core algorithms for the generation of deformation fields. It is a standalone library that can be directly included in a C or C++ project. It is paired with an optional [CUDA](https://en.wikipedia.org/wiki/CUDA) library, whose headers are in cuda/headers, that depends on src/headers and provides a GPGPU implementation of the key routines.\n+ a [Python C extension](https://docs.python.org/3.6/extending/extending.html) package _disptools (whose source is in the file python_c_extension/_disptools.c), providing a bare Python wrapper to the aforementioned library, using the [NumPy C API](https://docs.scipy.org/doc/numpy-1.14.0/reference/c-api.html) to pass arrays. This can be directly included in a Python project with no dependencies other than NumPy.\n+ a Python package (disptools), that wraps the _disptools package providing file IO (through SimpleITK) and implementing high-level features (such as the multi-resolution framework) and auxiliary utilities and functions.\n - disptools.displacements: module providing the main functions for the generation and manipulation of displacement fields.\n - disptools.drawing: collection of utilities to create test images.\n - disptools.io: collection of utilities to read and write to file.\n - disptools.measure: collection of utilities to measure some image features.\n - disptools.simulatrophy: routines to interface with the [Simul@atrophy](https://github.com/Inria-Asclepios/simul-atrophy) tool.\n - disptools.predict: routines to interface with the [PREDICT](https://www.nitrc.org/projects/atrophysim) tool.\n\n### Install\n\nThis package is available on [PyPI](https://pypi.org/project/disptools) both as source distribution and as a Windows pre-compiled binary wheel. You can install it with pip:\n```bash\n python3 -m pip install disptools\n```\n\n### Build from source\n\n#### Requirements\n\nThe library is a cross-platform Python 3.5+ package, with a compiled C extension. The Python dependencies are:\n+ [numpy](https://github.com/numpy/numpy) ([pypi package](https://pypi.python.org/pypi/numpy))\n+ [scipy](https://github.com/scipy/scipy) ([pypi package](https://pypi.org/pypi/scipy))\n+ [SimpleITK](https://github.com/SimpleITK/SimpleITK) ([pypi package](https://pypi.org/pypi/SimpleITK))\n\nBuild dependencies are a standard C compiler (tested with gcc 8.2 on Linux, mingw-w64 7.2 and MSVC 19 on Windows 10), [CMake](https://cmake.org/), the [numpy](https://pypi.python.org/pypi/numpy) and the [setuptools](https://pypi.python.org/pypi/setuptools) packages. [scikit-build](https://pypi.python.org/pypi/scikit-build) may be required to build the other Python dependencies.\n\nSome optional dependencies are required only for a limited set of features, and the package should build and run without them:\n+ [itk](https://github.com/InsightSoftwareConsortium/ITK) ([pypi package](https://pypi.org/project/itk)): for disptools.drawing.sitk_to_itk\n+ [vtk](https://github.com/Kitware/VTK) ([pypi package](https://pypi.org/project/vtk)): for disptools.io.write_vtk_points\n+ [ply](https://github.com/dabeaz/ply) ([pypi package](https://pypi.org/project/ply)): for disptools.io.read_elastix_parameters\n+ [scikit-image](https://github.com/scikit-image/scikit-image) ([pypi package](https://pypi.org/project/scikit-image)): for disptools.drawing.extract_slice, and to run the unit tests\n\n#### Build options\n\nThe following build flags are recognised by setup.py:\n+ --opt: enable non-portable optimisations.\n+ --debug: disable optimisations, compile with debug symbols.\n+ --cuda: enable CUDA support.\n\nAdditional flags starting with -D are also accepted and passed directly to CMake.\n\n#### Windows (Visual Studio) and Linux\n\nInstall the dependencies with your favourite package manager. For example, with pip:\n```bash\npython3 -m pip install scikit-build numpy scipy SimpleITK\n```\n\nThe package provides a setuptools based install script. To install the library, run from the project root folder\n```bash\npython3 setup.py install\n```\nwhich should build the C extension and install the Python package.\n\n#### Windows (MinGW)\n\n1. First, be sure that [mingw](https://mingw-w64.org), CMake and Python are installed and their executables [are in your PATH](https://docs.python.org/3/using/windows.html#excursus-setting-environment-variables).\n\n2. Ensure that gcc is working correctly:\n```none\n> gcc --version\ngcc (x86_64-posix-seh-rev1, Built by MinGW-W64 project) 7.2.0\nCopyright (C) 2017 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions. There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n```\n\n3. Ensure that distutils correctly recognises your version of Visual Studio (even when using mingw). Open the file C:\\Users\\yourname\\AppData\\Local\\Programs\\Python\\Python3x\\Lib\\distutils\\cygwinccompiler.py (the exact location may vary according to your setup) and check that your version of Visual Studio is present in the function get_msvcr(); if not, adjust it according to the following:\n```python\ndef get_msvcr():\n \"\"\"Include the appropriate MSVC runtime library if Python was built\n with MSVC 7.0 or later.\n \"\"\"\n msc_pos = sys.version.find('MSC v.')\n if msc_pos != -1:\n msc_ver = sys.version[msc_pos+6:msc_pos+10]\n if msc_ver == '1300':\n # MSVC 7.0\n return ['msvcr70']\n elif msc_ver == '1310':\n # MSVC 7.1\n return ['msvcr71']\n elif msc_ver == '1400':\n # VS2005 / MSVC 8.0\n return ['msvcr80']\n elif msc_ver == '1500':\n # VS2008 / MSVC 9.0\n return ['msvcr90']\n elif msc_ver == '1600':\n # VS2010 / MSVC 10.0\n return ['msvcr100']\n elif msc_ver == '1700':\n # Visual Studio 2012 / Visual C++ 11.0\n return ['msvcr110']\n elif msc_ver == '1800':\n # Visual Studio 2013 / Visual C++ 12.0\n return ['msvcr120']\n elif msc_ver == '1900':\n # Visual Studio 2015 / Visual C++ 14.0\n # \"msvcr140.dll no longer exists\" http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx\n return ['vcruntime140']\n else:\n raise ValueError(\"Unknown MS Compiler version %s \" % msc_ver)\n```\n\n4. Ensure that the library vcruntime140.dll is present in your library path. Otherwise, download it and place it in C:\\Users\\yourname\\AppData\\Local\\Programs\\Python\\Python3x\\libs (the exact path may vary according to your setup).\n\n5. Install the dependencies:\n```cmd\n> python -m pip install scikit-build numpy scipy SimpleITK\n```\n\n6. Clone the sources of this package with git, or download and extract them as a zip archive. Move to the root folder of the sources (C:\\Users\\yourname\\disptools in this example), specify the right compiler, and launch the setup script to build and install the package.\n```cmd\n> cd C:\\Users\\yourname\\disptools\n> python setup.py setopt --command=build --option=compiler --set-value=mingw32\n> python setup.py install\n```\n\n### References\n+ [1] van Eede, M. C., Scholz, J., Chakravarty, M. M., Henkelman, R. M., and Lerch, J. P. *Mapping registration sensitivity in MR mouse brain images.* Neuroimage 82 (2013), 226\u2013236.\n+ [2] Kara\u00e7ali, B., and Davatzikos, C. *Estimating topology preserving and smooth displacement fields.* IEEE Transactions on Medical Imaging 23, 7 (2004), 868\u2013880.\n+ [3] Kara\u00e7ali, B., and Davatzikos, C. *Simulation of tissue atrophy using a topology preserving transformation model.* IEEE transactions on medical imaging 25, 5 (2006), 649\u2013652.\n\n### License\n\nThe software is distributed under the MIT license.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/m-pilia/disptools/archive/v0.4.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/m-pilia/disptools", "keywords": "jacobian,displacement,image processing", "license": "", "maintainer": "", "maintainer_email": "", "name": "disptools", "package_url": "https://pypi.org/project/disptools/", "platform": "", "project_url": "https://pypi.org/project/disptools/", "project_urls": { "Download": "https://github.com/m-pilia/disptools/archive/v0.4.0.tar.gz", "Homepage": "https://github.com/m-pilia/disptools" }, "release_url": "https://pypi.org/project/disptools/0.4.0/", "requires_dist": null, "requires_python": "", "summary": "Generate displacement fields with known volume changes", "version": "0.4.0" }, "last_serial": 4340111, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "edf79ca44a3f711c54c55a919342c994", "sha256": "d70dd06783d02de5445adac2776c2357a09e613e5adf1ef066c20af3cebd6006" }, "downloads": -1, "filename": "disptools-0.1.1-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "edf79ca44a3f711c54c55a919342c994", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 139302, "upload_time": "2018-04-06T10:02:43", "url": "https://files.pythonhosted.org/packages/09/f5/d2401414d689187afdb9d47c8af53a0afb6de4eca14412344db13c38ce61/disptools-0.1.1-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "f66367317b2fa66e6179c0f8adfb7db1", "sha256": "81efd7e653db55b1c9b2cd4dcf1fdcd621ea01ca658118ed3596b63fe13d137b" }, "downloads": -1, "filename": "disptools-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f66367317b2fa66e6179c0f8adfb7db1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45474, "upload_time": "2018-04-06T10:01:57", "url": "https://files.pythonhosted.org/packages/48/8c/4edfe8c6b8e1331a9d796c637c21ab45695eb1c4363745f03f12e4db1432/disptools-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f9bfd5afa867c9f689cc83dce4daf5bd", "sha256": "76525308384980641a98b9ae02d3130cc557125079694793a8f28573af476a60" }, "downloads": -1, "filename": "disptools-0.2.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "f9bfd5afa867c9f689cc83dce4daf5bd", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 140766, "upload_time": "2018-04-20T08:36:22", "url": "https://files.pythonhosted.org/packages/b0/04/f23f66b17e48605ae558118b15ae9db232e18fbfde16db52f523c359bb51/disptools-0.2.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "9522b4b5f8a8362b33ee1acb6cebbb9c", "sha256": "77541cca40043fad6d1a2517b10da7b41f4a1564cd1c88b6b38de098bcf7cc8b" }, "downloads": -1, "filename": "disptools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9522b4b5f8a8362b33ee1acb6cebbb9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46009, "upload_time": "2018-04-20T08:36:07", "url": "https://files.pythonhosted.org/packages/c9/50/80c625e9ec9248f2f6d58b3d422ec7a9cf46760a3c8f6f281635972b70ec/disptools-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "136ad62c42c8082d39d6e5783f97a809", "sha256": "921515250abe7a510ece04c0d4bff443e89cfd8e64a4ef11a24e69fc6cc7ce7f" }, "downloads": -1, "filename": "disptools-0.2.1-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "136ad62c42c8082d39d6e5783f97a809", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 139894, "upload_time": "2018-04-25T12:10:56", "url": "https://files.pythonhosted.org/packages/b4/7b/61bfa5cdd49d9149df766ab02715022727a081c071a73e54e17a171bc88d/disptools-0.2.1-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "0ba33a2817f059151959a43d92fd8a08", "sha256": "ef6eff7de82c103f68480f5385c5555d493f43949b9621fbd5a5eb0f9e7462f3" }, "downloads": -1, "filename": "disptools-0.2.1.tar.gz", "has_sig": false, "md5_digest": "0ba33a2817f059151959a43d92fd8a08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53326, "upload_time": "2018-04-25T12:10:12", "url": "https://files.pythonhosted.org/packages/67/5e/1b0a5928c857ebc7f9e9638b2923138686634b55eb3a759e7a34d9d092a2/disptools-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6d96d84e31c56c372f38d04df7ad11ee", "sha256": "e425aba17361a6188e87510595d333391bd070281bd054105e98532b2a8ada59" }, "downloads": -1, "filename": "disptools-0.2.2-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "6d96d84e31c56c372f38d04df7ad11ee", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 135632, "upload_time": "2018-05-26T17:47:01", "url": "https://files.pythonhosted.org/packages/a4/4b/e83aab22b3fd6702afe15870a191d70f0653c2c85d6fba713a529b9b9ddf/disptools-0.2.2-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "943ebf32a2d520a8f124c245118f2237", "sha256": "1230fdf7bf3e8d246a88dd3ba4e10361a6aaf0085631f42cf45c3bee5d47bba4" }, "downloads": -1, "filename": "disptools-0.2.2.tar.gz", "has_sig": false, "md5_digest": "943ebf32a2d520a8f124c245118f2237", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53532, "upload_time": "2018-05-26T16:51:37", "url": "https://files.pythonhosted.org/packages/77/a0/a3f018c03f43f45980928a0eea7a0299fc29457a6b03bc40670492d41a34/disptools-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "1fbbeca1739e309a11f7c4c962f2c0b5", "sha256": "a68bec139802bdfa74b0b420936180006ae11296775aa56bef76407e2b3bb163" }, "downloads": -1, "filename": "disptools-0.2.3-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "1fbbeca1739e309a11f7c4c962f2c0b5", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 135717, "upload_time": "2018-06-28T14:23:37", "url": "https://files.pythonhosted.org/packages/01/f6/fcb159945047012439ba8b0ba94810e9a49d53b514b6efab8e03b97c5e04/disptools-0.2.3-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "812f6590acc80f4e3b70c0dabbc37aff", "sha256": "23fc61a2f5157c6442ec53449136c5e4ee4945468dd93f6abdce1846820788c2" }, "downloads": -1, "filename": "disptools-0.2.3.tar.gz", "has_sig": false, "md5_digest": "812f6590acc80f4e3b70c0dabbc37aff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53557, "upload_time": "2018-06-28T14:23:29", "url": "https://files.pythonhosted.org/packages/81/f6/227fe2a960ab64ec007bf4f90a12d4e09fbfd543f7218c4bc7d17925ca99/disptools-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f6602a57d750e95ab1c166067b3d8025", "sha256": "2485f12cea83607f643af5c763b1df2b36b02a376e3e6358ad804dc7b522f14d" }, "downloads": -1, "filename": "disptools-0.3.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "f6602a57d750e95ab1c166067b3d8025", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 137055, "upload_time": "2018-07-02T14:18:22", "url": "https://files.pythonhosted.org/packages/e5/a3/6932fbe98b0c117f3d210c69010867177414d0b24f844de8d0ddbe883cd4/disptools-0.3.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "d6d0997344891a37218929a042660c00", "sha256": "31e9180366a2fba44b66785289b3267a1f62937d1f773f4a26c9d76a8199024e" }, "downloads": -1, "filename": "disptools-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d6d0997344891a37218929a042660c00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54691, "upload_time": "2018-07-02T14:17:55", "url": "https://files.pythonhosted.org/packages/53/de/b566d2baab74a75f3d3c07d4b9dd42ecb958e2cd7a8c38cfd045d476f7dc/disptools-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f7722b9c96d44b4cdab9bd3724dc8936", "sha256": "4b34c6f0107ece4a3f76546fce5f9c7fe4f9f21772bc3eee0c7c20fc1ecb5849" }, "downloads": -1, "filename": "disptools-0.4.0-cp35-cp35m-win32.whl", "has_sig": false, "md5_digest": "f7722b9c96d44b4cdab9bd3724dc8936", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 67817, "upload_time": "2018-10-04T12:37:57", "url": "https://files.pythonhosted.org/packages/56/bd/f36e3712d4851ba711106bef50c27ed9428bebfe43cdedcf451cc10f6698/disptools-0.4.0-cp35-cp35m-win32.whl" }, { "comment_text": "", "digests": { "md5": "f0930348dc0c8398d7cb07c176986fad", "sha256": "e00a0db6c4e8d221338e3b23fa8a9bdbabaf5474707a2db48eba9cebfd36a0ea" }, "downloads": -1, "filename": "disptools-0.4.0-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "f0930348dc0c8398d7cb07c176986fad", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 168460, "upload_time": "2018-10-04T12:37:59", "url": "https://files.pythonhosted.org/packages/f1/92/e1b447244c64aff988451acb3eb401880c3ef8c8c8c0729e1776caf04bcb/disptools-0.4.0-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "9dfb62c86d715962e8703b0c01537665", "sha256": "6d7b1f20c3c832f3da7996320a8086c45b42228206233897394598e444889c38" }, "downloads": -1, "filename": "disptools-0.4.0-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "9dfb62c86d715962e8703b0c01537665", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 67846, "upload_time": "2018-10-04T12:38:01", "url": "https://files.pythonhosted.org/packages/09/f2/f5e2bb26c4a0a8de04d7fa90673b530c0ab8ea352de0ca988a6b2f5afa3d/disptools-0.4.0-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "7c6bae53b387df2a817e99ab641264f7", "sha256": "177dc719e474894cd4de4a9e8531941b014960340db1d304bc6079b65b4e1a44" }, "downloads": -1, "filename": "disptools-0.4.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "7c6bae53b387df2a817e99ab641264f7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 168483, "upload_time": "2018-10-04T12:38:03", "url": "https://files.pythonhosted.org/packages/0f/30/b11ee89537832425c2e28934090a304286b550cf82c211a6a1d852621300/disptools-0.4.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "921e415f84bd39a98ddb2b189b4c54ba", "sha256": "d6bcfcd7578aec19067e6631ce948323d67fde92554b091d41c81d9ca095685c" }, "downloads": -1, "filename": "disptools-0.4.0-cp37-cp37m-win32.whl", "has_sig": false, "md5_digest": "921e415f84bd39a98ddb2b189b4c54ba", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 67845, "upload_time": "2018-10-04T12:38:05", "url": "https://files.pythonhosted.org/packages/81/c1/d8ef50833bc91097ff8394d9fd9d3daccb113c632e4ee5f0f3e9ec599d0b/disptools-0.4.0-cp37-cp37m-win32.whl" }, { "comment_text": "", "digests": { "md5": "d57e7e21e157f5c00167a3095800f524", "sha256": "175f181806aa17b4b0de585ccce26408c24e4eb1113d5fa8cdf8aa0858eb2e33" }, "downloads": -1, "filename": "disptools-0.4.0-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "d57e7e21e157f5c00167a3095800f524", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 168486, "upload_time": "2018-10-04T12:38:06", "url": "https://files.pythonhosted.org/packages/a3/41/00e0f3ac929fb30b775785563b5100261f541fbdd2e0a90216c0195078a1/disptools-0.4.0-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "ba57b6831ddd7c7f80730f36659bb421", "sha256": "3244787ff59a16143aa24d1aca6193a5c7b972260a534f6ea7af4b9c3d15bd97" }, "downloads": -1, "filename": "disptools-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ba57b6831ddd7c7f80730f36659bb421", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73397, "upload_time": "2018-10-04T12:37:25", "url": "https://files.pythonhosted.org/packages/c2/c3/b59544ca5f962d3b894e5d4f149180db45c39b86cc0eb55e2dd64beeb175/disptools-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f7722b9c96d44b4cdab9bd3724dc8936", "sha256": "4b34c6f0107ece4a3f76546fce5f9c7fe4f9f21772bc3eee0c7c20fc1ecb5849" }, "downloads": -1, "filename": "disptools-0.4.0-cp35-cp35m-win32.whl", "has_sig": false, "md5_digest": "f7722b9c96d44b4cdab9bd3724dc8936", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 67817, "upload_time": "2018-10-04T12:37:57", "url": "https://files.pythonhosted.org/packages/56/bd/f36e3712d4851ba711106bef50c27ed9428bebfe43cdedcf451cc10f6698/disptools-0.4.0-cp35-cp35m-win32.whl" }, { "comment_text": "", "digests": { "md5": "f0930348dc0c8398d7cb07c176986fad", "sha256": "e00a0db6c4e8d221338e3b23fa8a9bdbabaf5474707a2db48eba9cebfd36a0ea" }, "downloads": -1, "filename": "disptools-0.4.0-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "f0930348dc0c8398d7cb07c176986fad", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 168460, "upload_time": "2018-10-04T12:37:59", "url": "https://files.pythonhosted.org/packages/f1/92/e1b447244c64aff988451acb3eb401880c3ef8c8c8c0729e1776caf04bcb/disptools-0.4.0-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "9dfb62c86d715962e8703b0c01537665", "sha256": "6d7b1f20c3c832f3da7996320a8086c45b42228206233897394598e444889c38" }, "downloads": -1, "filename": "disptools-0.4.0-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "9dfb62c86d715962e8703b0c01537665", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 67846, "upload_time": "2018-10-04T12:38:01", "url": "https://files.pythonhosted.org/packages/09/f2/f5e2bb26c4a0a8de04d7fa90673b530c0ab8ea352de0ca988a6b2f5afa3d/disptools-0.4.0-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "7c6bae53b387df2a817e99ab641264f7", "sha256": "177dc719e474894cd4de4a9e8531941b014960340db1d304bc6079b65b4e1a44" }, "downloads": -1, "filename": "disptools-0.4.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "7c6bae53b387df2a817e99ab641264f7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 168483, "upload_time": "2018-10-04T12:38:03", "url": "https://files.pythonhosted.org/packages/0f/30/b11ee89537832425c2e28934090a304286b550cf82c211a6a1d852621300/disptools-0.4.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "921e415f84bd39a98ddb2b189b4c54ba", "sha256": "d6bcfcd7578aec19067e6631ce948323d67fde92554b091d41c81d9ca095685c" }, "downloads": -1, "filename": "disptools-0.4.0-cp37-cp37m-win32.whl", "has_sig": false, "md5_digest": "921e415f84bd39a98ddb2b189b4c54ba", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 67845, "upload_time": "2018-10-04T12:38:05", "url": "https://files.pythonhosted.org/packages/81/c1/d8ef50833bc91097ff8394d9fd9d3daccb113c632e4ee5f0f3e9ec599d0b/disptools-0.4.0-cp37-cp37m-win32.whl" }, { "comment_text": "", "digests": { "md5": "d57e7e21e157f5c00167a3095800f524", "sha256": "175f181806aa17b4b0de585ccce26408c24e4eb1113d5fa8cdf8aa0858eb2e33" }, "downloads": -1, "filename": "disptools-0.4.0-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "d57e7e21e157f5c00167a3095800f524", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 168486, "upload_time": "2018-10-04T12:38:06", "url": "https://files.pythonhosted.org/packages/a3/41/00e0f3ac929fb30b775785563b5100261f541fbdd2e0a90216c0195078a1/disptools-0.4.0-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "ba57b6831ddd7c7f80730f36659bb421", "sha256": "3244787ff59a16143aa24d1aca6193a5c7b972260a534f6ea7af4b9c3d15bd97" }, "downloads": -1, "filename": "disptools-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ba57b6831ddd7c7f80730f36659bb421", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73397, "upload_time": "2018-10-04T12:37:25", "url": "https://files.pythonhosted.org/packages/c2/c3/b59544ca5f962d3b894e5d4f149180db45c39b86cc0eb55e2dd64beeb175/disptools-0.4.0.tar.gz" } ] }