pyminiply


Namepyminiply JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/pyvista/pyminiply
SummaryRead in PLY files using a wrapper over miniply
upload_time2023-10-31 18:16:24
maintainer
docs_urlNone
authorPyVista Developers
requires_python>=3.8
licenseMIT
keywords read ply
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ###########
 pyminiply
###########

|pypi| |MIT|

.. |pypi| image:: https://img.shields.io/pypi/v/pyminiply.svg?logo=python&logoColor=white
   :target: https://pypi.org/project/pyminiply/

.. |MIT| image:: https://img.shields.io/badge/License-MIT-yellow.svg
   :target: https://opensource.org/licenses/MIT

``pyminiply`` is a Python library for rapidly reading PLY files. It is a
Python wrapper around the fast C++ PLY reading library provided by
`miniply <ehttps://github.com/vilya/miniply>`_. Thanks @vilya!

The main advantage of ``pyminiply`` over other PLY reading libraries is
its performance. See the benchmarks below for more details.

**************
 Installation
**************

The recommended way to install ``pyminiply`` is via PyPI:

.. code:: sh

   pip install pyminiply

You can also clone the repository and install it from source:

.. code:: sh

   git clone https://github.com/pyvista/pyminiply.git
   cd pyminiply
   git submodule update --init --recursive
   pip install .

*******
 Usage
*******

Load in the vertices, indices, normals, UV, and color information from a
PLY file:

.. code:: pycon

   >>> import pyminiply
   >>> vertices, indices, normals, uv, color = pyminiply.read("example.ply")
   >>> vertices
   array([[ 5.0000000e-01, -5.0000000e-01, -5.5511151e-17],
          [ 4.0000001e-01, -5.0000000e-01, -4.4408922e-17],
          [ 3.0000001e-01, -5.0000000e-01, -3.3306692e-17],
          ...,
          [-4.2500001e-01,  5.0000000e-01,  4.7184480e-17],
          [-4.7499999e-01,  4.4999999e-01,  5.2735593e-17],
          [-5.0000000e-01,  4.2500001e-01,  5.5511151e-17]], dtype=float32)
   >>> indices
   array([[   0,  442,  441],
          [ 442,  122,  443],
          [ 443,  121,  441],
          ...,
          [1677,  438, 1679],
          [1679,  439, 1676],
          [1677, 1679, 1676]], dtype=int32)
   >>> normals
   array([[-1.110223e-16,  0.000000e+00, -1.000000e+00],
          [-1.110223e-16,  0.000000e+00, -1.000000e+00],
          [-1.110223e-16,  0.000000e+00, -1.000000e+00],
          ...,
          [-1.110223e-16,  0.000000e+00, -1.000000e+00],
          [-1.110223e-16,  0.000000e+00, -1.000000e+00],
          [-1.110223e-16,  0.000000e+00, -1.000000e+00]], dtype=float32)
   >>> uv
   array([[0.        , 0.        ],
          [0.1       , 0.        ],
          [0.2       , 0.        ],
          ...,
          [0.92499995, 1.        ],
          [0.975     , 0.95      ],
          [1.        , 0.92499995]], dtype=float32)
   >>> color
   array([[  0,   0,   0],
          [  0,   0,   0],
          [  0,   0,   0],
          ...,
          [254, 254, 254],
          [254, 254, 254],
          [255, 255, 255]], dtype=uint8)

You can also read in the PLY file as a `PyVista
<https://github.com/pyvista>`_ PolyData and immediately plot it.

.. code:: pycon

    >>> import pyminiply
    >>> mesh = pyminiply.read_as_mesh("example.ply")
    >>> mesh
    PolyData (0x7f0653579c00)
      N Cells:    200
      N Points:   121
      N Strips:   0
      X Bounds:   -5.000e-01, 5.000e-01
      Y Bounds:   -5.000e-01, 5.000e-01
      Z Bounds:   -5.551e-17, 5.551e-17
      N Arrays:   2

   >>> mesh.plot()

.. image:: https://github.com/pyvista/pyminiply/raw/main/demo.png

***********
 Benchmark
***********

The main reason behind writing yet another PLY file reader for Python is
to leverage the highly performant ``miniply`` library.

There is already an benchmark demonstrating how ``miniply`` outperforms
in comparison to competing C and C++ libraries at `ply_io_benchmark
<https://github.com/mhalber/ply_io_benchmark>`_ when reading PLY files.
The benchmark here shows how ``pyminiply`` performs relative to other
Python PLY file readers.

Here are the timings from reading in a 1,000,000 point binary PLY file:

+-------------+-----------------+
| Library     | Time (seconds)  |
+=============+=================+
| pyminiply   | 0.046           |
+-------------+-----------------+
| open3d      | 0.149           |
+-------------+-----------------+
| PyVista     | 0.409           |
| (VTK)       |                 |
+-------------+-----------------+
| meshio      | 0.512           |
+-------------+-----------------+
| plyfile     | 8.939           |
+-------------+-----------------+

**Benchmark source:**

.. code:: python

   import time

   import numpy as np
   import pyvista as pv
   import pyminiply
   import plyfile
   import meshio
   import open3d

   filename = 'tmp.ply'
   mesh = pv.Plane(i_resolution=999, j_resolution=999).triangulate()
   mesh.clear_data()
   mesh.save(filename)

   # pyminiply
   tstart = time.time()
   pyminiply.read(filename)
   tend = time.time() - tstart; print(f'pyminiply:   {tend:.3f}')

   # open3d
   tstart = time.time()
   open3d.io.read_point_cloud(filename)
   tend = time.time() - tstart; print(f'open3d:      {tend:.3f}')

   # VTK/PyVista
   tstart = time.time()
   pv.read(filename)
   tend = time.time() - tstart; print(f'VTK/PyVista: {tend:.3f}')

   tstart = time.time()
   meshio.read(filename)
   tend = time.time() - tstart; print(f'meshio:      {tend:.3f}')

   # plyfile
   tstart = time.time()
   plyfile.PlyData.read(filename)
   tend = time.time() - tstart; print(f'plyfile:     {tend:.3f}')

Comparison with VTK and PyVista
===============================

Here's an additional benchmark comparing VTK/PyVista with ``pyminiply``:

.. code:: python

   import numpy as np
   import time
   import pyvista as pv
   import matplotlib.pyplot as plt
   import pyminiply

   times = []
   filename = 'tmp.ply'
   for res in range(50, 800, 50):
       mesh = pv.Plane(i_resolution=res, j_resolution=res).triangulate().subdivide(2)
       mesh.clear_data()
       mesh.save(filename)

       tstart = time.time()
       pv_mesh = pv.read(filename)
       vtk_time = time.time() - tstart

       tstart = time.time()
       ply_mesh = pyminiply.read_as_mesh(filename)
       ply_reader_time =  time.time() - tstart

       assert np.allclose(pv_mesh['Normals'], ply_mesh['Normals'])
       assert np.allclose(pv_mesh.points, ply_mesh.points)
       assert np.allclose(pv_mesh._connectivity_array, ply_mesh._connectivity_array)

       times.append([mesh.n_points, vtk_time, ply_reader_time])
       print(times[-1])


   times = np.array(times)
   plt.figure(1)
   plt.title('PLY load time')
   plt.plot(times[:, 0], times[:, 1], label='VTK')
   plt.plot(times[:, 0], times[:, 2], label='pyminiply')
   plt.xlabel('Number of Points')
   plt.ylabel('Time to Load (seconds)')
   plt.legend()

   plt.figure(2)
   plt.title('PLY load time (Log-Log)')
   plt.loglog(times[:, 0], times[:, 1], label='VTK')
   plt.loglog(times[:, 0], times[:, 2], label='pyminiply')
   plt.xlabel('Number of Points')
   plt.ylabel('Time to Load (seconds)')
   plt.legend()
   plt.show()

.. image:: https://github.com/pyvista/pyminiply/raw/main/bench0.png

.. image:: https://github.com/pyvista/pyminiply/raw/main/bench1.png

*****************************
 License and Acknowledgments
*****************************

This project relies on ``miniply`` and credit goes to the original
author for the excellent C++ library. That work is licensed under the
MIT License.

The work in this repository is also licensed under the MIT License.

*********
 Support
*********

If you are having issues, please feel free to raise an `Issue
<https://github.com/pyvista/pyminiply/issues>`_.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pyvista/pyminiply",
    "name": "pyminiply",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "read ply",
    "author": "PyVista Developers",
    "author_email": "info@pyvista.org",
    "download_url": "https://files.pythonhosted.org/packages/81/b5/cbd800b46b82f0d2a0e3fcb1b1679d4462c0d5a3256bbfd555c7efa6c427/pyminiply-0.1.1.tar.gz",
    "platform": null,
    "description": "###########\n pyminiply\n###########\n\n|pypi| |MIT|\n\n.. |pypi| image:: https://img.shields.io/pypi/v/pyminiply.svg?logo=python&logoColor=white\n   :target: https://pypi.org/project/pyminiply/\n\n.. |MIT| image:: https://img.shields.io/badge/License-MIT-yellow.svg\n   :target: https://opensource.org/licenses/MIT\n\n``pyminiply`` is a Python library for rapidly reading PLY files. It is a\nPython wrapper around the fast C++ PLY reading library provided by\n`miniply <ehttps://github.com/vilya/miniply>`_. Thanks @vilya!\n\nThe main advantage of ``pyminiply`` over other PLY reading libraries is\nits performance. See the benchmarks below for more details.\n\n**************\n Installation\n**************\n\nThe recommended way to install ``pyminiply`` is via PyPI:\n\n.. code:: sh\n\n   pip install pyminiply\n\nYou can also clone the repository and install it from source:\n\n.. code:: sh\n\n   git clone https://github.com/pyvista/pyminiply.git\n   cd pyminiply\n   git submodule update --init --recursive\n   pip install .\n\n*******\n Usage\n*******\n\nLoad in the vertices, indices, normals, UV, and color information from a\nPLY file:\n\n.. code:: pycon\n\n   >>> import pyminiply\n   >>> vertices, indices, normals, uv, color = pyminiply.read(\"example.ply\")\n   >>> vertices\n   array([[ 5.0000000e-01, -5.0000000e-01, -5.5511151e-17],\n          [ 4.0000001e-01, -5.0000000e-01, -4.4408922e-17],\n          [ 3.0000001e-01, -5.0000000e-01, -3.3306692e-17],\n          ...,\n          [-4.2500001e-01,  5.0000000e-01,  4.7184480e-17],\n          [-4.7499999e-01,  4.4999999e-01,  5.2735593e-17],\n          [-5.0000000e-01,  4.2500001e-01,  5.5511151e-17]], dtype=float32)\n   >>> indices\n   array([[   0,  442,  441],\n          [ 442,  122,  443],\n          [ 443,  121,  441],\n          ...,\n          [1677,  438, 1679],\n          [1679,  439, 1676],\n          [1677, 1679, 1676]], dtype=int32)\n   >>> normals\n   array([[-1.110223e-16,  0.000000e+00, -1.000000e+00],\n          [-1.110223e-16,  0.000000e+00, -1.000000e+00],\n          [-1.110223e-16,  0.000000e+00, -1.000000e+00],\n          ...,\n          [-1.110223e-16,  0.000000e+00, -1.000000e+00],\n          [-1.110223e-16,  0.000000e+00, -1.000000e+00],\n          [-1.110223e-16,  0.000000e+00, -1.000000e+00]], dtype=float32)\n   >>> uv\n   array([[0.        , 0.        ],\n          [0.1       , 0.        ],\n          [0.2       , 0.        ],\n          ...,\n          [0.92499995, 1.        ],\n          [0.975     , 0.95      ],\n          [1.        , 0.92499995]], dtype=float32)\n   >>> color\n   array([[  0,   0,   0],\n          [  0,   0,   0],\n          [  0,   0,   0],\n          ...,\n          [254, 254, 254],\n          [254, 254, 254],\n          [255, 255, 255]], dtype=uint8)\n\nYou can also read in the PLY file as a `PyVista\n<https://github.com/pyvista>`_ PolyData and immediately plot it.\n\n.. code:: pycon\n\n    >>> import pyminiply\n    >>> mesh = pyminiply.read_as_mesh(\"example.ply\")\n    >>> mesh\n    PolyData (0x7f0653579c00)\n      N Cells:    200\n      N Points:   121\n      N Strips:   0\n      X Bounds:   -5.000e-01, 5.000e-01\n      Y Bounds:   -5.000e-01, 5.000e-01\n      Z Bounds:   -5.551e-17, 5.551e-17\n      N Arrays:   2\n\n   >>> mesh.plot()\n\n.. image:: https://github.com/pyvista/pyminiply/raw/main/demo.png\n\n***********\n Benchmark\n***********\n\nThe main reason behind writing yet another PLY file reader for Python is\nto leverage the highly performant ``miniply`` library.\n\nThere is already an benchmark demonstrating how ``miniply`` outperforms\nin comparison to competing C and C++ libraries at `ply_io_benchmark\n<https://github.com/mhalber/ply_io_benchmark>`_ when reading PLY files.\nThe benchmark here shows how ``pyminiply`` performs relative to other\nPython PLY file readers.\n\nHere are the timings from reading in a 1,000,000 point binary PLY file:\n\n+-------------+-----------------+\n| Library     | Time (seconds)  |\n+=============+=================+\n| pyminiply   | 0.046           |\n+-------------+-----------------+\n| open3d      | 0.149           |\n+-------------+-----------------+\n| PyVista     | 0.409           |\n| (VTK)       |                 |\n+-------------+-----------------+\n| meshio      | 0.512           |\n+-------------+-----------------+\n| plyfile     | 8.939           |\n+-------------+-----------------+\n\n**Benchmark source:**\n\n.. code:: python\n\n   import time\n\n   import numpy as np\n   import pyvista as pv\n   import pyminiply\n   import plyfile\n   import meshio\n   import open3d\n\n   filename = 'tmp.ply'\n   mesh = pv.Plane(i_resolution=999, j_resolution=999).triangulate()\n   mesh.clear_data()\n   mesh.save(filename)\n\n   # pyminiply\n   tstart = time.time()\n   pyminiply.read(filename)\n   tend = time.time() - tstart; print(f'pyminiply:   {tend:.3f}')\n\n   # open3d\n   tstart = time.time()\n   open3d.io.read_point_cloud(filename)\n   tend = time.time() - tstart; print(f'open3d:      {tend:.3f}')\n\n   # VTK/PyVista\n   tstart = time.time()\n   pv.read(filename)\n   tend = time.time() - tstart; print(f'VTK/PyVista: {tend:.3f}')\n\n   tstart = time.time()\n   meshio.read(filename)\n   tend = time.time() - tstart; print(f'meshio:      {tend:.3f}')\n\n   # plyfile\n   tstart = time.time()\n   plyfile.PlyData.read(filename)\n   tend = time.time() - tstart; print(f'plyfile:     {tend:.3f}')\n\nComparison with VTK and PyVista\n===============================\n\nHere's an additional benchmark comparing VTK/PyVista with ``pyminiply``:\n\n.. code:: python\n\n   import numpy as np\n   import time\n   import pyvista as pv\n   import matplotlib.pyplot as plt\n   import pyminiply\n\n   times = []\n   filename = 'tmp.ply'\n   for res in range(50, 800, 50):\n       mesh = pv.Plane(i_resolution=res, j_resolution=res).triangulate().subdivide(2)\n       mesh.clear_data()\n       mesh.save(filename)\n\n       tstart = time.time()\n       pv_mesh = pv.read(filename)\n       vtk_time = time.time() - tstart\n\n       tstart = time.time()\n       ply_mesh = pyminiply.read_as_mesh(filename)\n       ply_reader_time =  time.time() - tstart\n\n       assert np.allclose(pv_mesh['Normals'], ply_mesh['Normals'])\n       assert np.allclose(pv_mesh.points, ply_mesh.points)\n       assert np.allclose(pv_mesh._connectivity_array, ply_mesh._connectivity_array)\n\n       times.append([mesh.n_points, vtk_time, ply_reader_time])\n       print(times[-1])\n\n\n   times = np.array(times)\n   plt.figure(1)\n   plt.title('PLY load time')\n   plt.plot(times[:, 0], times[:, 1], label='VTK')\n   plt.plot(times[:, 0], times[:, 2], label='pyminiply')\n   plt.xlabel('Number of Points')\n   plt.ylabel('Time to Load (seconds)')\n   plt.legend()\n\n   plt.figure(2)\n   plt.title('PLY load time (Log-Log)')\n   plt.loglog(times[:, 0], times[:, 1], label='VTK')\n   plt.loglog(times[:, 0], times[:, 2], label='pyminiply')\n   plt.xlabel('Number of Points')\n   plt.ylabel('Time to Load (seconds)')\n   plt.legend()\n   plt.show()\n\n.. image:: https://github.com/pyvista/pyminiply/raw/main/bench0.png\n\n.. image:: https://github.com/pyvista/pyminiply/raw/main/bench1.png\n\n*****************************\n License and Acknowledgments\n*****************************\n\nThis project relies on ``miniply`` and credit goes to the original\nauthor for the excellent C++ library. That work is licensed under the\nMIT License.\n\nThe work in this repository is also licensed under the MIT License.\n\n*********\n Support\n*********\n\nIf you are having issues, please feel free to raise an `Issue\n<https://github.com/pyvista/pyminiply/issues>`_.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Read in PLY files using a wrapper over miniply",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/pyvista/pyminiply"
    },
    "split_keywords": [
        "read",
        "ply"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "76f530d1d0338fced5e1c831cf0e7ca55a078224844029471cd308a388a4aac8",
                "md5": "64da04788996d3809726df063b1682aa",
                "sha256": "76816c9ae350147a5667d70c6aeaaddbfe7fba31d93329a1f54ebca3a06483b9"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "64da04788996d3809726df063b1682aa",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 123847,
            "upload_time": "2023-10-31T18:15:52",
            "upload_time_iso_8601": "2023-10-31T18:15:52.027710Z",
            "url": "https://files.pythonhosted.org/packages/76/f5/30d1d0338fced5e1c831cf0e7ca55a078224844029471cd308a388a4aac8/pyminiply-0.1.1-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "776e26baff59fb8218f7bca60b5b9d36a752ed2f1a4150f0a9122296f684239c",
                "md5": "a15a6616cdb9992f8a43181329a0c20e",
                "sha256": "e5ebcae7fa1b9bce5c8200bae5ed039e0be49ea38323550c0616587f04b46a93"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a15a6616cdb9992f8a43181329a0c20e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 67194,
            "upload_time": "2023-10-31T18:15:53",
            "upload_time_iso_8601": "2023-10-31T18:15:53.883816Z",
            "url": "https://files.pythonhosted.org/packages/77/6e/26baff59fb8218f7bca60b5b9d36a752ed2f1a4150f0a9122296f684239c/pyminiply-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6bf0e818e2ca89dab8c2cea4e407d0dca1d2c7136bd1ee5fdb0c9a72c8856f4d",
                "md5": "2b46a55391a85d822609b24a268b201c",
                "sha256": "3b90d0ac8fea9271af23c1e4967b6fcc8a80c696fb6bc5d63f2dfef8dd63a14e"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2b46a55391a85d822609b24a268b201c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 463932,
            "upload_time": "2023-10-31T18:15:55",
            "upload_time_iso_8601": "2023-10-31T18:15:55.502714Z",
            "url": "https://files.pythonhosted.org/packages/6b/f0/e818e2ca89dab8c2cea4e407d0dca1d2c7136bd1ee5fdb0c9a72c8856f4d/pyminiply-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0b99bd3cbc647473738a54bc55a64fea263ab6a37c3e272af25bbf787adb77ca",
                "md5": "1de843fc33d144163c5e45f5eb97ffb2",
                "sha256": "97e434bf8fac2c9c6cc09b1f98dfd882cc9a60541a92ca34ffdefe598405e7c6"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1de843fc33d144163c5e45f5eb97ffb2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 52800,
            "upload_time": "2023-10-31T18:15:57",
            "upload_time_iso_8601": "2023-10-31T18:15:57.053757Z",
            "url": "https://files.pythonhosted.org/packages/0b/99/bd3cbc647473738a54bc55a64fea263ab6a37c3e272af25bbf787adb77ca/pyminiply-0.1.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "005ae010d4a8f7fa7a5e6583fedbdebd08ea9b40251bbabd4342152e65640dbc",
                "md5": "4fd57ca40845f35b59ce2e788c50cbd8",
                "sha256": "f4c98fb89d62c867726c41a72f28070e5a5f7c6f26516643d077dc672eeb2766"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "4fd57ca40845f35b59ce2e788c50cbd8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 123916,
            "upload_time": "2023-10-31T18:15:58",
            "upload_time_iso_8601": "2023-10-31T18:15:58.513974Z",
            "url": "https://files.pythonhosted.org/packages/00/5a/e010d4a8f7fa7a5e6583fedbdebd08ea9b40251bbabd4342152e65640dbc/pyminiply-0.1.1-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "492e6dc6729d6b4c484490f5058775ced94772bde81ec0656da8c2373318559e",
                "md5": "b1acb86a5b0bbadf23b67bb7047220c3",
                "sha256": "d4cd574cdf61a1f9144c0e5f045dcf9c1304553a239c551ba5e19d990dc065d1"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b1acb86a5b0bbadf23b67bb7047220c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 67333,
            "upload_time": "2023-10-31T18:15:59",
            "upload_time_iso_8601": "2023-10-31T18:15:59.617071Z",
            "url": "https://files.pythonhosted.org/packages/49/2e/6dc6729d6b4c484490f5058775ced94772bde81ec0656da8c2373318559e/pyminiply-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e89eda63b38fbb27ad1871de22d67a577926066c896aef1adcf28baf92e0bce1",
                "md5": "835b84cc6136a9c30c4c2dcb5eff9b3d",
                "sha256": "218c88b940ee20fde0048d6c797ac7bc70676ab0f3ae4e69ed9cc29c35ecabaa"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "835b84cc6136a9c30c4c2dcb5eff9b3d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 476785,
            "upload_time": "2023-10-31T18:16:01",
            "upload_time_iso_8601": "2023-10-31T18:16:01.129956Z",
            "url": "https://files.pythonhosted.org/packages/e8/9e/da63b38fbb27ad1871de22d67a577926066c896aef1adcf28baf92e0bce1/pyminiply-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "21562d9b4b3127158e48e82831da9517ba1d678356c2ee8f5635115fc23cba32",
                "md5": "e2b420439741bb7c5e0c0c03e9341c1a",
                "sha256": "edadaf5f84effeef40bb93b1a800f74260ac437818058d2ec085b37babee4692"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e2b420439741bb7c5e0c0c03e9341c1a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 52818,
            "upload_time": "2023-10-31T18:16:03",
            "upload_time_iso_8601": "2023-10-31T18:16:03.290260Z",
            "url": "https://files.pythonhosted.org/packages/21/56/2d9b4b3127158e48e82831da9517ba1d678356c2ee8f5635115fc23cba32/pyminiply-0.1.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "02dde940dfc59bcd6f1093eceb60a11c23121f76cb1047e50fe5c558e5b42c86",
                "md5": "5ee58739a30a5446a0ed833e72351cc9",
                "sha256": "8727e6de855829c50719006b6b6ec9ab3a42348a447fe97f5fd8c5a6f34df9a7"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp312-cp312-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "5ee58739a30a5446a0ed833e72351cc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 123843,
            "upload_time": "2023-10-31T18:16:05",
            "upload_time_iso_8601": "2023-10-31T18:16:05.015172Z",
            "url": "https://files.pythonhosted.org/packages/02/dd/e940dfc59bcd6f1093eceb60a11c23121f76cb1047e50fe5c558e5b42c86/pyminiply-0.1.1-cp312-cp312-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "139331cbb8d5f87060d4d98f8195c15fc0e4d4690de3de5f1afb741eee4b58b6",
                "md5": "530c4ff71490f12fcd761ed6755fccda",
                "sha256": "3fe1595e017f4d257ef54ce3d9acbfc504103beddc316142049c85a1d06a6490"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "530c4ff71490f12fcd761ed6755fccda",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 67254,
            "upload_time": "2023-10-31T18:16:06",
            "upload_time_iso_8601": "2023-10-31T18:16:06.498699Z",
            "url": "https://files.pythonhosted.org/packages/13/93/31cbb8d5f87060d4d98f8195c15fc0e4d4690de3de5f1afb741eee4b58b6/pyminiply-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e3c9b34e884eb87407466655990151e558b927a0f4f71861d176134f5eaab903",
                "md5": "84f110afa7d31e76f816747fca6a2bf7",
                "sha256": "0388f3f464007b86b3daffd8255be102a246738228d099f4eae48cc78e3a0448"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "84f110afa7d31e76f816747fca6a2bf7",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 478259,
            "upload_time": "2023-10-31T18:16:08",
            "upload_time_iso_8601": "2023-10-31T18:16:08.016582Z",
            "url": "https://files.pythonhosted.org/packages/e3/c9/b34e884eb87407466655990151e558b927a0f4f71861d176134f5eaab903/pyminiply-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c035897b76a886270f239ffbccb081d07a858f19b96bfd737b3dd5f841e24a29",
                "md5": "96539b3388099906eefb46cc04368005",
                "sha256": "6cd769906d206f5ee93ed3dcd2556a0b1ee0ab031aafc8801c2c886865003836"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "96539b3388099906eefb46cc04368005",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 52740,
            "upload_time": "2023-10-31T18:16:09",
            "upload_time_iso_8601": "2023-10-31T18:16:09.931579Z",
            "url": "https://files.pythonhosted.org/packages/c0/35/897b76a886270f239ffbccb081d07a858f19b96bfd737b3dd5f841e24a29/pyminiply-0.1.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f5f1d426cbe714dd75cc6d1d5e3f8e0a91611e96343ad00b50066674b33a854d",
                "md5": "b1ca302c0f217664916b84ebc3ca9929",
                "sha256": "ff214ed3c3a2227389c3c2402d8f4d40d8b5642f724fc382af76e9d422bc441f"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp38-cp38-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "b1ca302c0f217664916b84ebc3ca9929",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 124644,
            "upload_time": "2023-10-31T18:16:11",
            "upload_time_iso_8601": "2023-10-31T18:16:11.581885Z",
            "url": "https://files.pythonhosted.org/packages/f5/f1/d426cbe714dd75cc6d1d5e3f8e0a91611e96343ad00b50066674b33a854d/pyminiply-0.1.1-cp38-cp38-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2346cb7c606f860e5869587ea681fd391c4a142e2755395c2ef493eefebe4975",
                "md5": "0d2257bee73e94f78fadb03a246a313d",
                "sha256": "28f1cb4da723cbf08e7a887668ae88299fcd08ea2ebbf6d40087c739188afc8d"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0d2257bee73e94f78fadb03a246a313d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 67583,
            "upload_time": "2023-10-31T18:16:13",
            "upload_time_iso_8601": "2023-10-31T18:16:13.138962Z",
            "url": "https://files.pythonhosted.org/packages/23/46/cb7c606f860e5869587ea681fd391c4a142e2755395c2ef493eefebe4975/pyminiply-0.1.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fbf8037531a90835e12c31926790bad71269fc6233b29ec1e6e7c1cf91b22966",
                "md5": "d50db1c034176a15dcc2ad7cf0e90a58",
                "sha256": "45ec8550c058cff8856d49472d27e731c81c90a68d8b6988c08a2ac2b1d5b5d7"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d50db1c034176a15dcc2ad7cf0e90a58",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 468594,
            "upload_time": "2023-10-31T18:16:14",
            "upload_time_iso_8601": "2023-10-31T18:16:14.840780Z",
            "url": "https://files.pythonhosted.org/packages/fb/f8/037531a90835e12c31926790bad71269fc6233b29ec1e6e7c1cf91b22966/pyminiply-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a5991d6205f1a06eaadc232ec1458d6e2b20bd43ffcd6fcd913f671487c0c5b6",
                "md5": "4d0ffd6c90ae3e0d6882de716dbbd48f",
                "sha256": "04e87bc2c94965f29e54b2a18b630ec9ec7cff93d260420e88e7954c4e0f8983"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4d0ffd6c90ae3e0d6882de716dbbd48f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 53444,
            "upload_time": "2023-10-31T18:16:16",
            "upload_time_iso_8601": "2023-10-31T18:16:16.065958Z",
            "url": "https://files.pythonhosted.org/packages/a5/99/1d6205f1a06eaadc232ec1458d6e2b20bd43ffcd6fcd913f671487c0c5b6/pyminiply-0.1.1-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "edeca4d7a0d1cea63ed47af1fce00395b144211483e60ba453f2f3cba392c4ac",
                "md5": "1bdf2103630be0971b2fba4e90bb075c",
                "sha256": "b149e83565c47e3cc3110ef40ff8f0f5bb63e9024bb9faa5d62e522b1cdff8cf"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "1bdf2103630be0971b2fba4e90bb075c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 124581,
            "upload_time": "2023-10-31T18:16:17",
            "upload_time_iso_8601": "2023-10-31T18:16:17.690180Z",
            "url": "https://files.pythonhosted.org/packages/ed/ec/a4d7a0d1cea63ed47af1fce00395b144211483e60ba453f2f3cba392c4ac/pyminiply-0.1.1-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8cd54a59da5610faa8420fde7535cf0f158f062e7ed6c40f5038cc71126427a6",
                "md5": "1d1ac8b0e6a89c7821f09ad0a504b4e4",
                "sha256": "0412606eadeb0cc26ab8bd423121633bea33ef27a291fedd4d76862d1e85c2ef"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1d1ac8b0e6a89c7821f09ad0a504b4e4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 67621,
            "upload_time": "2023-10-31T18:16:19",
            "upload_time_iso_8601": "2023-10-31T18:16:19.444128Z",
            "url": "https://files.pythonhosted.org/packages/8c/d5/4a59da5610faa8420fde7535cf0f158f062e7ed6c40f5038cc71126427a6/pyminiply-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8c6a44e0adeae2d9a7bf44f625a448cadc997edad5c193bfa805230c78d0e730",
                "md5": "1bf8792e7767a05144978ba549a7f68c",
                "sha256": "63970e81d82682f4fb11e1c215bc1aa8364338b2cac0cd18c1659a958faa91c3"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1bf8792e7767a05144978ba549a7f68c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 465798,
            "upload_time": "2023-10-31T18:16:21",
            "upload_time_iso_8601": "2023-10-31T18:16:21.796286Z",
            "url": "https://files.pythonhosted.org/packages/8c/6a/44e0adeae2d9a7bf44f625a448cadc997edad5c193bfa805230c78d0e730/pyminiply-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ae99d54cc4b47c21f0eb3def5d35cfad6f35e0d66f2ca926b9a1c7e53a2cd976",
                "md5": "494a19a4d6842a446d6734f56776c3e3",
                "sha256": "8803b112290706e969ea931e11805f365c46a2dc759673f4841a690f6584ec97"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "494a19a4d6842a446d6734f56776c3e3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 53077,
            "upload_time": "2023-10-31T18:16:23",
            "upload_time_iso_8601": "2023-10-31T18:16:23.469646Z",
            "url": "https://files.pythonhosted.org/packages/ae/99/d54cc4b47c21f0eb3def5d35cfad6f35e0d66f2ca926b9a1c7e53a2cd976/pyminiply-0.1.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "81b5cbd800b46b82f0d2a0e3fcb1b1679d4462c0d5a3256bbfd555c7efa6c427",
                "md5": "0188c130103600373323f5d8e5828393",
                "sha256": "9cc47f1ac9852ac053148c67883042e92f1a97a3c1ac7f167b2457388f2e9b9c"
            },
            "downloads": -1,
            "filename": "pyminiply-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "0188c130103600373323f5d8e5828393",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 28400,
            "upload_time": "2023-10-31T18:16:24",
            "upload_time_iso_8601": "2023-10-31T18:16:24.890709Z",
            "url": "https://files.pythonhosted.org/packages/81/b5/cbd800b46b82f0d2a0e3fcb1b1679d4462c0d5a3256bbfd555c7efa6c427/pyminiply-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-31 18:16:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pyvista",
    "github_project": "pyminiply",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pyminiply"
}
        
Elapsed time: 0.13671s