Name | stl-reader JSON |
Version |
0.2.2
JSON |
| download |
home_page | None |
Summary | Read in STL files |
upload_time | 2024-11-26 21:27:58 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
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"
}