stl-reader


Namestl-reader JSON
Version 0.2.2 PyPI version JSON
download
home_pageNone
SummaryRead in STL files
upload_time2024-11-26 21:27:58
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ############
 stl-reader
############

|pypi| |MIT|

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

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

``stl-reader`` is a Python library for rapidly reading binary and ASCII
STL files. It wraps a `nanobind
<https://nanobind.readthedocs.io/en/latest/>`_ interface to the fast STL
library provided by `libstl <https://github.com/aki5/libstl>`_. Thanks
@aki5!

The main advantage of ``stl-reader`` over other STL reading libraries is
its performance. It is particularly well-suited for large files, mainly
due to its efficient use of hashing when merging points. This results in
a 5-35x speedup over VTK for files containing between 4,000 and
9,000,000 points.

See the benchmarks below for more details.

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

The recommended way to install ``stl-reader`` is via PyPI:

.. code:: sh

   pip install stl-reader

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

.. code:: sh

   git clone https://github.com/pyvista/stl-reader.git
   cd stl-reader
   pip install .

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

Load in the vertices and indices of a STL file directly as a NumPy
array:

.. code:: pycon

   >>> import stl_reader
   >>> vertices, indices = stl_reader.read("example.stl")
   >>> vertices
   array([[-0.01671113,  0.5450843 , -0.8382146 ],
          [ 0.01671113,  0.5450843 , -0.8382146 ],
          [ 0.        ,  0.52573115, -0.8506509 ],
          ...,
          [ 0.5952229 , -0.57455426,  0.56178033],
          [ 0.56178033, -0.5952229 ,  0.57455426],
          [ 0.57455426, -0.56178033,  0.5952229 ]], dtype=float32)
   >>> indices
   array([[      0,       1,       2],
          [      1,       3,       4],
          [      4,       5,       2],
          ...,
          [9005998, 9005988, 9005999],
          [9005999, 9005996, 9005995],
          [9005998, 9005999, 9005995]], dtype=uint32)

In this example, ``vertices`` is a 2D NumPy array where each row
represents a vertex and the three columns represent the X, Y, and Z
coordinates, respectively. ``indices`` is a 1D NumPy array representing
the triangles from the STL file.

Alternatively, you can load in the STL file as a PyVista PolyData:

.. code:: pycon

   >>> import stl_reader
   >>> mesh = stl_reader.read_as_mesh('example.stl')
   >>> mesh
   PolyData (0x7f43063ec700)
     N Cells:    1280000
     N Points:   641601
     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:   0

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

The main reason behind writing yet another STL file reader for Python is
to leverage the performant `libstl <https://github.com/aki5/libstl>`_
library.

Here are some timings from reading in a 1,000,000 point binary STL file:

+-------------+-----------------------+
| Library     | Time (seconds)        |
+=============+=======================+
| stl-reader  | 0.174                 |
+-------------+-----------------------+
| numpy-stl   | 0.201 (see note)      |
+-------------+-----------------------+
| PyVista     | 1.663                 |
| (VTK)       |                       |
+-------------+-----------------------+
| meshio      | 4.451                 |
+-------------+-----------------------+

**Note** ``numpy-stl`` does not merge duplicate vertices.

Comparison with VTK
===================

Here's an additional benchmark comparing VTK with ``stl-reader``:

.. code:: python

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

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

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

       tstart = time.time()
       out_stl = stl_reader.read(filename)
       stl_reader_time =  time.time() - tstart

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


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

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

.. image:: https://github.com/pyvista/stl-reader/raw/main/bench0.png

.. image:: https://github.com/pyvista/stl-reader/raw/main/bench1.png

Read in ASCII Meshes
====================

The `stl-reader` also supports ASCII files and is around 2.4 times
faster than VTK at reading ASCII files.

.. code:: python

   import time
   import stl_reader
   import pyvista as pv
   import numpy as np

   # create and save a ASCII file
   n = 1000
   mesh = pv.Plane(i_resolution=n, j_resolution=n).triangulate()
   mesh.save("/tmp/tmp-ascii.stl", binary=False)

   # stl reader
   tstart = time.time()
   mesh = stl_reader.read_as_mesh("/tmp/tmp-ascii.stl")
   print("stl-reader    ", time.time() - tstart)

   tstart = time.time()
   pv_mesh = pv.read("/tmp/tmp-ascii.stl")
   print("pyvista reader", time.time() - tstart)

   # verify meshes are identical
   assert np.allclose(mesh.points, pv_mesh.points)

   # approximate time to read in the 1M point file:
   # stl-reader     0.80303955078125
   # pyvista reader 1.916085958480835

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

This project relies on `libstl <https://github.com/aki5/libstl>`_ for
reading in and merging the vertices of a STL file. Wherever code is
reused, the original `MIT License
<https://github.com/aki5/libstl/blob/master/LICENSE>`_ is mentioned.

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/stl-reader/issues>`_.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "stl-reader",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "PyVista Developers <info@pyvista.org>",
    "download_url": "https://files.pythonhosted.org/packages/fe/9c/1bb0463a86be2f549f842f6d06676ac3862cb336eb384e7e756eb24f68e9/stl-reader-0.2.2.tar.gz",
    "platform": null,
    "description": "############\n stl-reader\n############\n\n|pypi| |MIT|\n\n.. |pypi| image:: https://img.shields.io/pypi/v/stl-reader.svg?logo=python&logoColor=white\n   :target: https://pypi.org/project/stl-reader/\n\n.. |MIT| image:: https://img.shields.io/badge/License-MIT-yellow.svg\n   :target: https://opensource.org/licenses/MIT\n\n``stl-reader`` is a Python library for rapidly reading binary and ASCII\nSTL files. It wraps a `nanobind\n<https://nanobind.readthedocs.io/en/latest/>`_ interface to the fast STL\nlibrary provided by `libstl <https://github.com/aki5/libstl>`_. Thanks\n@aki5!\n\nThe main advantage of ``stl-reader`` over other STL reading libraries is\nits performance. It is particularly well-suited for large files, mainly\ndue to its efficient use of hashing when merging points. This results in\na 5-35x speedup over VTK for files containing between 4,000 and\n9,000,000 points.\n\nSee the benchmarks below for more details.\n\n**************\n Installation\n**************\n\nThe recommended way to install ``stl-reader`` is via PyPI:\n\n.. code:: sh\n\n   pip install stl-reader\n\nYou can also clone the repository and install it from source:\n\n.. code:: sh\n\n   git clone https://github.com/pyvista/stl-reader.git\n   cd stl-reader\n   pip install .\n\n*******\n Usage\n*******\n\nLoad in the vertices and indices of a STL file directly as a NumPy\narray:\n\n.. code:: pycon\n\n   >>> import stl_reader\n   >>> vertices, indices = stl_reader.read(\"example.stl\")\n   >>> vertices\n   array([[-0.01671113,  0.5450843 , -0.8382146 ],\n          [ 0.01671113,  0.5450843 , -0.8382146 ],\n          [ 0.        ,  0.52573115, -0.8506509 ],\n          ...,\n          [ 0.5952229 , -0.57455426,  0.56178033],\n          [ 0.56178033, -0.5952229 ,  0.57455426],\n          [ 0.57455426, -0.56178033,  0.5952229 ]], dtype=float32)\n   >>> indices\n   array([[      0,       1,       2],\n          [      1,       3,       4],\n          [      4,       5,       2],\n          ...,\n          [9005998, 9005988, 9005999],\n          [9005999, 9005996, 9005995],\n          [9005998, 9005999, 9005995]], dtype=uint32)\n\nIn this example, ``vertices`` is a 2D NumPy array where each row\nrepresents a vertex and the three columns represent the X, Y, and Z\ncoordinates, respectively. ``indices`` is a 1D NumPy array representing\nthe triangles from the STL file.\n\nAlternatively, you can load in the STL file as a PyVista PolyData:\n\n.. code:: pycon\n\n   >>> import stl_reader\n   >>> mesh = stl_reader.read_as_mesh('example.stl')\n   >>> mesh\n   PolyData (0x7f43063ec700)\n     N Cells:    1280000\n     N Points:   641601\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:   0\n\n***********\n Benchmark\n***********\n\nThe main reason behind writing yet another STL file reader for Python is\nto leverage the performant `libstl <https://github.com/aki5/libstl>`_\nlibrary.\n\nHere are some timings from reading in a 1,000,000 point binary STL file:\n\n+-------------+-----------------------+\n| Library     | Time (seconds)        |\n+=============+=======================+\n| stl-reader  | 0.174                 |\n+-------------+-----------------------+\n| numpy-stl   | 0.201 (see note)      |\n+-------------+-----------------------+\n| PyVista     | 1.663                 |\n| (VTK)       |                       |\n+-------------+-----------------------+\n| meshio      | 4.451                 |\n+-------------+-----------------------+\n\n**Note** ``numpy-stl`` does not merge duplicate vertices.\n\nComparison with VTK\n===================\n\nHere's an additional benchmark comparing VTK with ``stl-reader``:\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 stl_reader\n\n   times = []\n   filename = 'tmp.stl'\n   for res in range(50, 800, 50):\n       mesh = pv.Plane(i_resolution=res, j_resolution=res).triangulate().subdivide(2)\n       mesh.save(filename)\n\n       tstart = time.time()\n       out_pv = pv.read(filename)\n       vtk_time = time.time() - tstart\n\n       tstart = time.time()\n       out_stl = stl_reader.read(filename)\n       stl_reader_time =  time.time() - tstart\n\n       times.append([mesh.n_points, vtk_time, stl_reader_time])\n       print(times[-1])\n\n\n   times = np.array(times)\n   plt.figure(1)\n   plt.title('STL load time')\n   plt.plot(times[:, 0], times[:, 1], label='VTK')\n   plt.plot(times[:, 0], times[:, 2], label='stl_reader')\n   plt.xlabel('Number of Points')\n   plt.ylabel('Time to Load (seconds)')\n   plt.legend()\n\n   plt.figure(2)\n   plt.title('STL load time (Log-Log)')\n   plt.loglog(times[:, 0], times[:, 1], label='VTK')\n   plt.loglog(times[:, 0], times[:, 2], label='stl_reader')\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/stl-reader/raw/main/bench0.png\n\n.. image:: https://github.com/pyvista/stl-reader/raw/main/bench1.png\n\nRead in ASCII Meshes\n====================\n\nThe `stl-reader` also supports ASCII files and is around 2.4 times\nfaster than VTK at reading ASCII files.\n\n.. code:: python\n\n   import time\n   import stl_reader\n   import pyvista as pv\n   import numpy as np\n\n   # create and save a ASCII file\n   n = 1000\n   mesh = pv.Plane(i_resolution=n, j_resolution=n).triangulate()\n   mesh.save(\"/tmp/tmp-ascii.stl\", binary=False)\n\n   # stl reader\n   tstart = time.time()\n   mesh = stl_reader.read_as_mesh(\"/tmp/tmp-ascii.stl\")\n   print(\"stl-reader    \", time.time() - tstart)\n\n   tstart = time.time()\n   pv_mesh = pv.read(\"/tmp/tmp-ascii.stl\")\n   print(\"pyvista reader\", time.time() - tstart)\n\n   # verify meshes are identical\n   assert np.allclose(mesh.points, pv_mesh.points)\n\n   # approximate time to read in the 1M point file:\n   # stl-reader     0.80303955078125\n   # pyvista reader 1.916085958480835\n\n*****************************\n License and Acknowledgments\n*****************************\n\nThis project relies on `libstl <https://github.com/aki5/libstl>`_ for\nreading in and merging the vertices of a STL file. Wherever code is\nreused, the original `MIT License\n<https://github.com/aki5/libstl/blob/master/LICENSE>`_ is mentioned.\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/stl-reader/issues>`_.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Read in STL files",
    "version": "0.2.2",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "98433aa5e7a83ec6d58962a77326270f36b3dcd9710297a848d35c643aa73a1b",
                "md5": "3b86d6ee0f41efaff2dce6a5ac710baf",
                "sha256": "fa0482bc4cdafb53bb4228ba953afc7b6ea6e36ae7e000b1746597d91081e8be"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp310-cp310-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3b86d6ee0f41efaff2dce6a5ac710baf",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 44940,
            "upload_time": "2024-11-26T21:27:31",
            "upload_time_iso_8601": "2024-11-26T21:27:31.129674Z",
            "url": "https://files.pythonhosted.org/packages/98/43/3aa5e7a83ec6d58962a77326270f36b3dcd9710297a848d35c643aa73a1b/stl_reader-0.2.2-cp310-cp310-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0e5deb5c10d11e05420a64d14b1b6c12767d3fdac70d54aaffc542a8994638ce",
                "md5": "12c65eb5e4f6904ceff36e29b4efc6d6",
                "sha256": "30776aa411260e9f66f7f9684de41c8aa00d1074b6eea63d6fd1371f3fc64e51"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "12c65eb5e4f6904ceff36e29b4efc6d6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 42243,
            "upload_time": "2024-11-26T21:27:32",
            "upload_time_iso_8601": "2024-11-26T21:27:32.175908Z",
            "url": "https://files.pythonhosted.org/packages/0e/5d/eb5c10d11e05420a64d14b1b6c12767d3fdac70d54aaffc542a8994638ce/stl_reader-0.2.2-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "64ddfc3a16eb48544a21d066e4815a6e68fb1f61ffd74e4251b5f25148fbee0f",
                "md5": "e228117d6976a1186c80e7efc26c1103",
                "sha256": "b796d8c4e7e6d3e10e52b8213c4f23c0f35db0b43d4924e910084ffeea7105cb"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e228117d6976a1186c80e7efc26c1103",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 67878,
            "upload_time": "2024-11-26T21:27:33",
            "upload_time_iso_8601": "2024-11-26T21:27:33.799596Z",
            "url": "https://files.pythonhosted.org/packages/64/dd/fc3a16eb48544a21d066e4815a6e68fb1f61ffd74e4251b5f25148fbee0f/stl_reader-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "acaa0b4650485aa09ad1d9463e9103f16b48c12d7511932858757b99fbb63959",
                "md5": "2c530f82881821052e1937fbf4fd7a21",
                "sha256": "e7bf62b5e33bb09256e8c23dfad6f793bf75d24e31d46c78b3ef2107a5f60935"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2c530f82881821052e1937fbf4fd7a21",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 50123,
            "upload_time": "2024-11-26T21:27:34",
            "upload_time_iso_8601": "2024-11-26T21:27:34.717047Z",
            "url": "https://files.pythonhosted.org/packages/ac/aa/0b4650485aa09ad1d9463e9103f16b48c12d7511932858757b99fbb63959/stl_reader-0.2.2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6f4197c01c663c3b5ded3e6ecbaaacd53a4b5eabcbc1d77e8a24601e1cc122b",
                "md5": "25aa24b14919d19993ee225912f9506b",
                "sha256": "0182e27bf145542bc3ee9099d1fe19bfe94c9e661bf29fc3e0f007f1bfce4c94"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp311-cp311-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "25aa24b14919d19993ee225912f9506b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 44780,
            "upload_time": "2024-11-26T21:27:35",
            "upload_time_iso_8601": "2024-11-26T21:27:35.624058Z",
            "url": "https://files.pythonhosted.org/packages/f6/f4/197c01c663c3b5ded3e6ecbaaacd53a4b5eabcbc1d77e8a24601e1cc122b/stl_reader-0.2.2-cp311-cp311-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "897f1230fb6d7a942c3d072592e931da2d0298191375c6c15314149d0778d760",
                "md5": "42b138e6b5d74eb35711c751513e5fe0",
                "sha256": "d283d8de02a9c438032bfee53ddc7903344a282b580bd59f510f6dc082f6dece"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "42b138e6b5d74eb35711c751513e5fe0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 42037,
            "upload_time": "2024-11-26T21:27:36",
            "upload_time_iso_8601": "2024-11-26T21:27:36.535438Z",
            "url": "https://files.pythonhosted.org/packages/89/7f/1230fb6d7a942c3d072592e931da2d0298191375c6c15314149d0778d760/stl_reader-0.2.2-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb604457becabbd0414e94461f5a2bb3580ebbdf90e3c477114cf725f6d27212",
                "md5": "97835bf3a05a533fdd562a732c6a052e",
                "sha256": "79c316d672eb6b72cd86d599287f6c64ed61e8f1ea13b08880f94713a1ff040a"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "97835bf3a05a533fdd562a732c6a052e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 67678,
            "upload_time": "2024-11-26T21:27:38",
            "upload_time_iso_8601": "2024-11-26T21:27:38.112636Z",
            "url": "https://files.pythonhosted.org/packages/eb/60/4457becabbd0414e94461f5a2bb3580ebbdf90e3c477114cf725f6d27212/stl_reader-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1e1c93460dcc8881fa0d4b6bd76dcf72a9f83f5e436c963b160d09190208e999",
                "md5": "fac39f66bd0afe2e52ce641381e122fd",
                "sha256": "b2358a619dc131e3951ebbdaec908adde7dc67a72fac1b153786be775d65c8e5"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "fac39f66bd0afe2e52ce641381e122fd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 49986,
            "upload_time": "2024-11-26T21:27:39",
            "upload_time_iso_8601": "2024-11-26T21:27:39.534033Z",
            "url": "https://files.pythonhosted.org/packages/1e/1c/93460dcc8881fa0d4b6bd76dcf72a9f83f5e436c963b160d09190208e999/stl_reader-0.2.2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2b06e8dd89c16516201c4de22cdd1c9ff711633ff309b484e82854189b659192",
                "md5": "e6580f967bae88a59b96fbf3962ac4a3",
                "sha256": "896e1ba781a9b3e82fc22f833ee64c513de3523463a0cee3d18c586cd92b0051"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp312-cp312-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e6580f967bae88a59b96fbf3962ac4a3",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 42722,
            "upload_time": "2024-11-26T21:27:41",
            "upload_time_iso_8601": "2024-11-26T21:27:41.157451Z",
            "url": "https://files.pythonhosted.org/packages/2b/06/e8dd89c16516201c4de22cdd1c9ff711633ff309b484e82854189b659192/stl_reader-0.2.2-cp312-cp312-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "73525052a5e46a9f9b1a023de50c54d0a7b5c780aa5a0e4f82ffc7198e7bbd6b",
                "md5": "6106645ae8241a6dbdd773c543f2f657",
                "sha256": "044343dfe02002c4e8f609c19c8c3c5225541611959fd42de3e1df2d9962ba99"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "6106645ae8241a6dbdd773c543f2f657",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 40008,
            "upload_time": "2024-11-26T21:27:42",
            "upload_time_iso_8601": "2024-11-26T21:27:42.078437Z",
            "url": "https://files.pythonhosted.org/packages/73/52/5052a5e46a9f9b1a023de50c54d0a7b5c780aa5a0e4f82ffc7198e7bbd6b/stl_reader-0.2.2-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e53c1a3f0be3f947a49d745825f3efef0aaf44870b3274f707ed76e8e6f29909",
                "md5": "7f69c6122b45d16fefecf0a5b4e4f326",
                "sha256": "830d738b9c74e36f6b62ffa26f03db6e90c4460a06474ade0e41163dfa5a9f22"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7f69c6122b45d16fefecf0a5b4e4f326",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 64646,
            "upload_time": "2024-11-26T21:27:43",
            "upload_time_iso_8601": "2024-11-26T21:27:43.729087Z",
            "url": "https://files.pythonhosted.org/packages/e5/3c/1a3f0be3f947a49d745825f3efef0aaf44870b3274f707ed76e8e6f29909/stl_reader-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3bb4f42d69f958afa1b2eb73dc1e690fbc94316f8a21b476d49b9a4fd81d2a5e",
                "md5": "1b773e3e24ad1ce411b7e67b65c48cad",
                "sha256": "f2c0d4d34a1e4c75160e154b0bb091264d7c638c675f7e25e72c60f94a26a87f"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1b773e3e24ad1ce411b7e67b65c48cad",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 48220,
            "upload_time": "2024-11-26T21:27:45",
            "upload_time_iso_8601": "2024-11-26T21:27:45.386851Z",
            "url": "https://files.pythonhosted.org/packages/3b/b4/f42d69f958afa1b2eb73dc1e690fbc94316f8a21b476d49b9a4fd81d2a5e/stl_reader-0.2.2-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0e5ebb8a12ab37fcea50fe550607970ae6b191c9750d8f046ccb5e074f0b353b",
                "md5": "aaa63ed8c382b3696c791cc88a49a2c5",
                "sha256": "47e3199c61ea965e05db8f56a18bf8f5141b1ed693dc30da89efee79d3f34323"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp313-cp313-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "aaa63ed8c382b3696c791cc88a49a2c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 42723,
            "upload_time": "2024-11-26T21:27:47",
            "upload_time_iso_8601": "2024-11-26T21:27:47.011642Z",
            "url": "https://files.pythonhosted.org/packages/0e/5e/bb8a12ab37fcea50fe550607970ae6b191c9750d8f046ccb5e074f0b353b/stl_reader-0.2.2-cp313-cp313-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "33f287c6656970e62b617a5622fa1e6513d110d020b77c67a1c792cff1126101",
                "md5": "8602cccb3034d4ad4faa7c6c63acf384",
                "sha256": "19ddf3964b5b17c4112d56270737d3defce405f609c78d3866960be65bdccc50"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "8602cccb3034d4ad4faa7c6c63acf384",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 40007,
            "upload_time": "2024-11-26T21:27:47",
            "upload_time_iso_8601": "2024-11-26T21:27:47.995893Z",
            "url": "https://files.pythonhosted.org/packages/33/f2/87c6656970e62b617a5622fa1e6513d110d020b77c67a1c792cff1126101/stl_reader-0.2.2-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "83f538839b803529b379b28ff95a14b0fc84f101dfe74a2f34166881593e6626",
                "md5": "6bf6168db51ec09df996b8e4250aa0e7",
                "sha256": "42cb933cd614b72c46cdecd62cd96c930852d3669d5a9e324b4ba5f227301a58"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6bf6168db51ec09df996b8e4250aa0e7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 64645,
            "upload_time": "2024-11-26T21:27:50",
            "upload_time_iso_8601": "2024-11-26T21:27:50.509818Z",
            "url": "https://files.pythonhosted.org/packages/83/f5/38839b803529b379b28ff95a14b0fc84f101dfe74a2f34166881593e6626/stl_reader-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8e29e21f2d43d65d5706c3d8e6dc8685c5e100c577890307b917e36fb80c1db8",
                "md5": "cf01777f42fd941617241eefc065f052",
                "sha256": "e482c11f632c9debc7cae836774057ad06376d895b411e567d8a931eeba4a1e6"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "cf01777f42fd941617241eefc065f052",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 48232,
            "upload_time": "2024-11-26T21:27:51",
            "upload_time_iso_8601": "2024-11-26T21:27:51.400656Z",
            "url": "https://files.pythonhosted.org/packages/8e/29/e21f2d43d65d5706c3d8e6dc8685c5e100c577890307b917e36fb80c1db8/stl_reader-0.2.2-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3884f34d192347b65bd4c82257d3281019ea48305fe78a511f74a9be13fe10b0",
                "md5": "5b78280d4780f91c1ef2a73305d0de57",
                "sha256": "f53a94719c40fada47bc5852c0c9ab612ddd625ed8b4c7bf538059af632ff2f4"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp39-cp39-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5b78280d4780f91c1ef2a73305d0de57",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 44968,
            "upload_time": "2024-11-26T21:27:52",
            "upload_time_iso_8601": "2024-11-26T21:27:52.702672Z",
            "url": "https://files.pythonhosted.org/packages/38/84/f34d192347b65bd4c82257d3281019ea48305fe78a511f74a9be13fe10b0/stl_reader-0.2.2-cp39-cp39-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e3399389f3e6ee0491b7c3f70ea3cc912aa72bec7be47697322fab2d0eba9e41",
                "md5": "df3cc9b3d85133e64930972af43bc83a",
                "sha256": "adad7944745383e4e75e2186576d0925a3540558e64345f4b1c024f8a504055b"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "df3cc9b3d85133e64930972af43bc83a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 42272,
            "upload_time": "2024-11-26T21:27:53",
            "upload_time_iso_8601": "2024-11-26T21:27:53.845254Z",
            "url": "https://files.pythonhosted.org/packages/e3/39/9389f3e6ee0491b7c3f70ea3cc912aa72bec7be47697322fab2d0eba9e41/stl_reader-0.2.2-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2513008316473c084bd38853a95ac08ef488772014aadc4b3375e35f11aa82b4",
                "md5": "da147848553a3248406ef863e918a034",
                "sha256": "fe5a54242599888df7e6e4d0cc73f16fb6a2ebd58d94a3b25f362e29559780bc"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "da147848553a3248406ef863e918a034",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 67926,
            "upload_time": "2024-11-26T21:27:54",
            "upload_time_iso_8601": "2024-11-26T21:27:54.891770Z",
            "url": "https://files.pythonhosted.org/packages/25/13/008316473c084bd38853a95ac08ef488772014aadc4b3375e35f11aa82b4/stl_reader-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e49cd43acfe8d428166aea49cdc24e47daf0f4cf4374ddc5ddceb486f14f07db",
                "md5": "246d82736402a33f178d680f81a77fb4",
                "sha256": "e772be1764a1c7134e3e8aa675e813b97d0a2b6d33946fc980b82849b30a3223"
            },
            "downloads": -1,
            "filename": "stl_reader-0.2.2-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "246d82736402a33f178d680f81a77fb4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 50545,
            "upload_time": "2024-11-26T21:27:57",
            "upload_time_iso_8601": "2024-11-26T21:27:57.311288Z",
            "url": "https://files.pythonhosted.org/packages/e4/9c/d43acfe8d428166aea49cdc24e47daf0f4cf4374ddc5ddceb486f14f07db/stl_reader-0.2.2-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fe9c1bb0463a86be2f549f842f6d06676ac3862cb336eb384e7e756eb24f68e9",
                "md5": "f67175df8172e9451d35a43fefe67a51",
                "sha256": "f8dff216163d91567dc005727b502ee330d0b5851187b8ca7c1e510f8a351749"
            },
            "downloads": -1,
            "filename": "stl-reader-0.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "f67175df8172e9451d35a43fefe67a51",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 13448,
            "upload_time": "2024-11-26T21:27:58",
            "upload_time_iso_8601": "2024-11-26T21:27:58.225712Z",
            "url": "https://files.pythonhosted.org/packages/fe/9c/1bb0463a86be2f549f842f6d06676ac3862cb336eb384e7e756eb24f68e9/stl-reader-0.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-26 21:27:58",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "stl-reader"
}
        
Elapsed time: 7.31440s