# OpenSTL
The fastest and most intuitive library to manipulate STL files (stereolithography) for C++ and Python, header-only.
[](http://commitizen.github.io/cz-cli/)
[](https://conventionalcommits.org)
[](LICENSE)
[](https://badge.fury.io/py/openstl)
[](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml)
[](https://pypi.org/project/openstl/)
🌟 :fist_raised: Please consider starring and sponsoring the GitHub repo to show your support! :fist_raised: 🌟

## Index
1. **Performance**
- [Performance Benchmark](#performances-benchmark)
2. **Python Usage**
- [Install](#install)
- [Read and Write STL Files](#read-and-write-from-a-stl-file)
- [Rotate, Translate, and Scale Meshes](#rotate-translate-and-scale-a-mesh)
- [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces)
- [Find Connected Components](#find-connected-components-in-mesh-topology-disjoint-solids)
- [Use with PyTorch](#use-with-pytorch)
- [Handling Large STL Files](#read-large-stl-file)
3. **C++ Usage**
- [Read STL from File](#read-stl-from-file)
- [Write STL to File](#write-stl-to-a-file)
- [Serialize STL to Stream](#serialize-stl-to-a-stream)
- [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces-1)
- [Find Connected Components](#find-connected-components-in-mesh-topology)
4. **C++ Integration**
- [Smart Method with CMake](#smart-method)
- [Naïve Method](#naïve-method)
5. **Testing**
- [Run Tests](#test)
6. **Requirements**
- [C++ Standards](#requirements)
7. **Disclaimer**
- [STL File Format Limitations](#disclaimer-stl-file-format)
# Performances benchmark
Discover the staggering performance of OpenSTL in comparison to [numpy-stl](https://github.com/wolph/numpy-stl),
[meshio](https://github.com/nschloe/meshio) and [stl-reader](https://github.com/pyvista/stl-reader), thanks to its powerful C++ backend.
See [benchmark.py](benchmark/benchmark.py). Benchmark performed on an Intel i5-9600KF CPU @ 3.70GHz.

Performance gains over numpy-stl, meshio and stl-reader
#openstl vs numpy-stl
Write: OpenSTL is 1.262 to 5.998 X faster than numpy-stl
Read: OpenSTL is 2.131 to 11.144 X faster than numpy-stl
Rotate: OpenSTL is 0.971 to 13.873 X faster than numpy-stl
Rotate: OpenSTL + PyTorch is 0.022 to 100.25 X faster than numpy-stl
#openstl vs meshio
Write: OpenSTL is 4.289 to 80.714 X faster than meshio
Read: OpenSTL is 15.915 to 311.365 X faster than meshio
#openstl vs stl_reader
Read: OpenSTL is 0.719 to 2.2 X faster than stl_reader
Note: meshio has no specific way of rotating vertices, so it was not benchmarked.
# Python Usage
### Install
`pip install openstl` or `pip install -U git+https://github.com/Innoptech/OpenSTL@main`
### Read and write from a STL file
```python
import openstl
import numpy as np
# Define an array of triangles
# Following the STL standard, each triangle is defined with : normal, v0, v1, v2
quad = np.array([
# normal, vertices 0, vertices 1, vertices 2
[[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1
[[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2
])
# Serialize the triangles to a file
success = openstl.write("quad.stl", quad, openstl.format.binary) # Or openstl.format.ascii (slower but human readable)
if not success:
raise Exception("Error: Failed to write to the specified file.")
# Deserialize triangles from a file
deserialized_quad = openstl.read("quad.stl")
# Print the deserialized triangles
print("Deserialized Triangles:", deserialized_quad)
```
### Rotate, translate and scale a mesh
```python
import openstl
import numpy as np
quad = openstl.read("quad.stl")
# Rotating
rotation_matrix = np.array([
[0,-1, 0],
[1, 0, 0],
[0, 0, 1]
])
rotated_quad = np.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)
# Translating
translation_vector = np.array([1,1,1])
quad[:,1:4,:] += translation_vector # Avoid translating normals
# Scaling
scale = 1000.0
quad[:,1:4,:] *= scale # Avoid scaling normals
```
### Convert Triangles :arrow_right: Vertices and Faces
```python
import openstl
# Define an array of triangles
triangles = [
# normal, vertices 0, vertices 1, vertices 2
[[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1
[[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2
]
# Convert triangles to vertices and faces
vertices, faces = openstl.convert.verticesandfaces(triangles)
```
### Convert Vertices and Faces :arrow_right: Triangles
```python
import openstl
# Define vertices and faces
vertices = [
[0.0, 0.0, 0.0],
[1.0, 1.0, 1.0],
[2.0, 2.0, 2.0],
[3.0, 3.0, 3.0],
]
faces = [
[0, 1, 2], # Face 1
[1, 3, 2] # Face 2
]
# Convert vertices and faces to triangles
triangles = openstl.convert.triangles(vertices, faces)
```
### Find Connected Components in Mesh Topology (Disjoint solids)
```python
import openstl
# Define vertices and faces for two disconnected components
vertices = [
[0.0, 0.0, 0.0],
[1.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[2.0, 2.0, 0.0],
[3.0, 2.0, 0.0],
[2.5, 3.0, 0.0],
]
faces = [
[0, 1, 2], # Component 1
[3, 4, 5], # Component 2
]
# Identify connected components of faces
connected_components = openstl.topology.find_connected_components(vertices, faces)
# Print the result
print(f"Number of connected components: {len(connected_components)}")
for i, component in enumerate(connected_components):
print(f"Component {i + 1}: {component}")
```
### Use with `Pytorch`
```python
import openstl
import torch
quad = torch.Tensor(openstl.read("quad.stl")).to('cuda')
# Rotating
rotation_matrix = torch.Tensor([
[0,-1, 0],
[1, 0, 0],
[0, 0, 1]
]).to('cuda')
rotated_quad = torch.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)
# Translating
translation_vector = torch.Tensor([1,1,1]).to('cuda')
quad[:,1:4,:] += translation_vector # Avoid translating normals
# Scaling
scale = 1000.0
quad[:,1:4,:] *= scale # Avoid scaling normals
```
### Read large STL file
To read STL file with a large triangle count > **1 000 000**, the openstl buffer overflow safety must be unactivated with
`openstl.set_activate_overflow_safety(False)` after import. Deactivating overflow safety may expose the application
to a potential buffer overflow attack vector since the stl standard is not backed by a checksum.
This can cause significant risks if openstl (and any other STL reader) is used as part of a service in a backend server for example. For
domestic usage, ignore this warning. OpenSTl is the only stl reader to provide such default safety feature.
# C++ Usage
### Read STL from file
```c++
#include <openstl/core/stl.h>
std::ifstream file(filename, std::ios::binary);
if (!file.is_open()) {
std::cerr << "Error: Unable to open file '" << filename << "'" << std::endl;
}
// Deserialize the triangles in either binary or ASCII format
std::vector<openstl::Triangle> triangles = openstl::deserializeStl(file);
file.close();
```
### Write STL to a file
```c++
std::ofstream file(filename, std::ios::binary);
if (!file.is_open()) {
std::cerr << "Error: Unable to open file '" << filename << "'" << std::endl;
}
std::vector<openstl::Triangle> originalTriangles{}; // User triangles
openstl::serialize(originalTriangles, file, openstl::StlFormat::Binary); // Or StlFormat::ASCII
if (file.fail()) {
std::cerr << "Error: Failed to write to file " << filename << std::endl;
} else {
std::cout << "File " << filename << " has been successfully written." << std::endl;
}
file.close();
```
### Serialize STL to a stream
```c++
std::stringstream ss;
std::vector<openstl::Triangle> originalTriangles{}; // User triangles
openstl::serialize(originalTriangles, ss, openstl::StlFormat::Binary); // Or StlFormat::ASCII
```
### Convert Triangles :arrow_right: Vertices and Faces
```c++
using namespace openstl
std::vector triangles = {
// normal, vertices 0, vertices 1, vertices 2
Triangle{{0.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}},
Triangle{{0.0f, 0.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}, {4.0f, 4.0f, 4.0f}}
};
const auto& [vertices, faces] = convertToVerticesAndFaces(triangles);
```
### Convert Vertices and Faces :arrow_right: Triangles
```c++
using namespace openstl
std::vector vertices = {
Vec3{0.0f, 0.0f, 0.0f}, Vec3{1.0f, 1.0f, 1.0f}, Vec3{2.0f, 2.0f, 2.0f}, Vec3{3.0f, 3.0f, 3.0f}
};
std::vector<Face> faces = {
{0, 1, 2}, {3, 1, 2}
};
const auto& triangles = convertToTriangles(vertices, faces);
```
### Find Connected Components in Mesh Topology
```c++
#include <openstl/topology.hpp>
#include <vector>
#include <iostream>
using namespace openstl;
int main() {
std::vector<Vec3> vertices = {
{0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, // Component 1
{2.0f, 2.0f, 0.0f}, {3.0f, 2.0f, 0.0f}, {2.5f, 3.0f, 0.0f} // Component 2
};
std::vector<Face> faces = {
{0, 1, 2}, // Component 1
{3, 4, 5}, // Component 2
};
const auto& connected_components = findConnectedComponents(vertices, faces);
std::cout << "Number of connected components: " << connected_components.size() << "\\n";
for (size_t i = 0; i < connected_components.size(); ++i) {
std::cout << "Component " << i + 1 << ":\\n";
for (const auto& face : connected_components[i]) {
std::cout << " {" << face[0] << ", " << face[1] << ", " << face[2] << "}\\n";
}
}
return 0;
}
```
****
# Integrate to your C++ codebase
### Smart method
Include this repository with CMAKE Fetchcontent and link your executable/library to `openstl::core` library.
Choose weither you want to fetch a specific branch or tag using `GIT_TAG`. Use the `main` branch to keep updated with the latest improvements.
```cmake
include(FetchContent)
FetchContent_Declare(
openstl
GIT_REPOSITORY https://github.com/Innoptech/OpenSTL.git
GIT_TAG main
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(openstl)
```
### Naïve method
Simply add [stl.h](modules/core/include/openstl/core/stl.h) to your codebase.
# Test
```bash
git clone https://github.com/Innoptech/OpenSTL
mkdir OpenSTL/build && cd OpenSTL/build
cmake -DOPENSTL_BUILD_TESTS=ON .. && cmake --build .
ctest .
```
# Requirements
C++17 or higher.
# DISCLAIMER: STL File Format #
The STL file format, while widely used for 3D modeling and printing, was designed to be simple and easy to parse. However, this simplicity comes with some significant limitations:
- Lack of Built-in Validation Mechanisms: The STL format does not include built-in mechanisms such as checksums, hashes, or any form of file validation. This makes it challenging to detect certain types of file corruption, such as a truncated header or malformed data. As a result, errors in file transmission, storage, or manipulation might go undetected.
- Vulnerability to Corruption: Due to the lack of validation features, STL files can be easily corrupted. For example, if the file is truncated or contains invalid data, these issues may not be detected until the file is parsed or processed, potentially leading to crashes or undefined behavior in applications that use the file.
- Potential for Buffer Overflow Attacks: The lack of built-in validation and the absence of bounds checking in the STL format can make it susceptible to buffer overflow attacks. Care should be taken when handling STL files, especially those from untrusted sources, to ensure they are properly validated before being used.
These limitations are inherent to the STL format and should be considered when working with or implementing software that processes STL files. Developers are encouraged to implement additional validation and error-handling mechanisms in their applications to mitigate these risks.
Raw data
{
"_id": null,
"home_page": "https://github.com/Innoptech/OpenSTL",
"name": "openstl",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.4",
"maintainer_email": null,
"keywords": null,
"author": "Jean-Christophe Ruel",
"author_email": "info@innoptech.com",
"download_url": null,
"platform": null,
"description": "# OpenSTL\nThe fastest and most intuitive library to manipulate STL files (stereolithography) for C++ and Python, header-only. \n\n\n[](http://commitizen.github.io/cz-cli/)\n[](https://conventionalcommits.org)\n[](LICENSE) \n[](https://badge.fury.io/py/openstl)\n[](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml)\n[](https://pypi.org/project/openstl/) \n\n \ud83c\udf1f :fist_raised: Please consider starring and sponsoring the GitHub repo to show your support! :fist_raised: \ud83c\udf1f \n\n\n## Index\n1. **Performance**\n - [Performance Benchmark](#performances-benchmark)\n\n2. **Python Usage**\n - [Install](#install)\n - [Read and Write STL Files](#read-and-write-from-a-stl-file)\n - [Rotate, Translate, and Scale Meshes](#rotate-translate-and-scale-a-mesh)\n - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces)\n - [Find Connected Components](#find-connected-components-in-mesh-topology-disjoint-solids)\n - [Use with PyTorch](#use-with-pytorch)\n - [Handling Large STL Files](#read-large-stl-file)\n\n3. **C++ Usage**\n - [Read STL from File](#read-stl-from-file)\n - [Write STL to File](#write-stl-to-a-file)\n - [Serialize STL to Stream](#serialize-stl-to-a-stream)\n - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces-1)\n - [Find Connected Components](#find-connected-components-in-mesh-topology)\n\n4. **C++ Integration**\n - [Smart Method with CMake](#smart-method)\n - [Na\u00efve Method](#na\u00efve-method)\n\n5. **Testing**\n - [Run Tests](#test)\n\n6. **Requirements**\n - [C++ Standards](#requirements)\n\n7. **Disclaimer**\n - [STL File Format Limitations](#disclaimer-stl-file-format)\n\n\n# Performances benchmark\nDiscover the staggering performance of OpenSTL in comparison to [numpy-stl](https://github.com/wolph/numpy-stl),\n [meshio](https://github.com/nschloe/meshio) and [stl-reader](https://github.com/pyvista/stl-reader), thanks to its powerful C++ backend.\nSee [benchmark.py](benchmark/benchmark.py). Benchmark performed on an Intel i5-9600KF CPU @ 3.70GHz.\n\n\n\n Performance gains over numpy-stl, meshio and stl-reader\n #openstl vs numpy-stl \n Write:\tOpenSTL is 1.262 to 5.998 X faster than numpy-stl\n Read:\tOpenSTL is 2.131 to 11.144 X faster than numpy-stl\n Rotate:\tOpenSTL is 0.971 to 13.873 X faster than numpy-stl\n Rotate:\tOpenSTL + PyTorch is 0.022 to 100.25 X faster than numpy-stl\n\n #openstl vs meshio \n Write:\tOpenSTL is 4.289 to 80.714 X faster than meshio\n Read:\tOpenSTL is 15.915 to 311.365 X faster than meshio\n\n #openstl vs stl_reader \n Read:\tOpenSTL is 0.719 to 2.2 X faster than stl_reader\n\nNote: meshio has no specific way of rotating vertices, so it was not benchmarked. \n\n# Python Usage\n### Install\n`pip install openstl` or `pip install -U git+https://github.com/Innoptech/OpenSTL@main`\n\n### Read and write from a STL file\n```python\nimport openstl\nimport numpy as np\n\n# Define an array of triangles\n# Following the STL standard, each triangle is defined with : normal, v0, v1, v2\nquad = np.array([\n # normal, vertices 0, vertices 1, vertices 2\n [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1\n [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2\n])\n\n# Serialize the triangles to a file\nsuccess = openstl.write(\"quad.stl\", quad, openstl.format.binary) # Or openstl.format.ascii (slower but human readable)\n\nif not success:\n raise Exception(\"Error: Failed to write to the specified file.\")\n\n# Deserialize triangles from a file\ndeserialized_quad = openstl.read(\"quad.stl\")\n\n# Print the deserialized triangles\nprint(\"Deserialized Triangles:\", deserialized_quad)\n```\n### Rotate, translate and scale a mesh\n```python\nimport openstl\nimport numpy as np\n\nquad = openstl.read(\"quad.stl\")\n\n# Rotating\nrotation_matrix = np.array([\n [0,-1, 0],\n [1, 0, 0],\n [0, 0, 1]\n])\nrotated_quad = np.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)\n\n# Translating\ntranslation_vector = np.array([1,1,1])\nquad[:,1:4,:] += translation_vector # Avoid translating normals\n\n# Scaling\nscale = 1000.0\nquad[:,1:4,:] *= scale # Avoid scaling normals\n```\n\n### Convert Triangles :arrow_right: Vertices and Faces\n```python\nimport openstl\n\n# Define an array of triangles\ntriangles = [\n # normal, vertices 0, vertices 1, vertices 2\n [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1\n [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2\n]\n\n# Convert triangles to vertices and faces\nvertices, faces = openstl.convert.verticesandfaces(triangles)\n```\n\n### Convert Vertices and Faces :arrow_right: Triangles\n```python\nimport openstl\n\n# Define vertices and faces\nvertices = [\n [0.0, 0.0, 0.0],\n [1.0, 1.0, 1.0],\n [2.0, 2.0, 2.0],\n [3.0, 3.0, 3.0],\n]\n\nfaces = [\n [0, 1, 2], # Face 1 \n [1, 3, 2] # Face 2 \n]\n\n# Convert vertices and faces to triangles\ntriangles = openstl.convert.triangles(vertices, faces)\n``` \n\n### Find Connected Components in Mesh Topology (Disjoint solids)\n```python\nimport openstl\n\n# Define vertices and faces for two disconnected components\nvertices = [\n [0.0, 0.0, 0.0],\n [1.0, 0.0, 0.0],\n [0.0, 1.0, 0.0],\n [2.0, 2.0, 0.0],\n [3.0, 2.0, 0.0],\n [2.5, 3.0, 0.0],\n]\n\nfaces = [\n [0, 1, 2], # Component 1\n [3, 4, 5], # Component 2\n]\n\n# Identify connected components of faces\nconnected_components = openstl.topology.find_connected_components(vertices, faces)\n\n# Print the result\nprint(f\"Number of connected components: {len(connected_components)}\")\nfor i, component in enumerate(connected_components):\n print(f\"Component {i + 1}: {component}\")\n```\n\n\n### Use with `Pytorch`\n```python\nimport openstl\nimport torch\n\nquad = torch.Tensor(openstl.read(\"quad.stl\")).to('cuda')\n\n# Rotating\nrotation_matrix = torch.Tensor([\n [0,-1, 0],\n [1, 0, 0],\n [0, 0, 1]\n]).to('cuda')\nrotated_quad = torch.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)\n\n# Translating\ntranslation_vector = torch.Tensor([1,1,1]).to('cuda')\nquad[:,1:4,:] += translation_vector # Avoid translating normals\n\n# Scaling\nscale = 1000.0\nquad[:,1:4,:] *= scale # Avoid scaling normals\n```\n\n### Read large STL file\nTo read STL file with a large triangle count > **1 000 000**, the openstl buffer overflow safety must be unactivated with\n`openstl.set_activate_overflow_safety(False)` after import. Deactivating overflow safety may expose the application \nto a potential buffer overflow attack vector since the stl standard is not backed by a checksum.\nThis can cause significant risks if openstl (and any other STL reader) is used as part of a service in a backend server for example. For\ndomestic usage, ignore this warning. OpenSTl is the only stl reader to provide such default safety feature.\n\n# C++ Usage\n### Read STL from file\n```c++\n#include <openstl/core/stl.h>\n\nstd::ifstream file(filename, std::ios::binary);\nif (!file.is_open()) {\n std::cerr << \"Error: Unable to open file '\" << filename << \"'\" << std::endl;\n}\n\n// Deserialize the triangles in either binary or ASCII format\nstd::vector<openstl::Triangle> triangles = openstl::deserializeStl(file);\nfile.close();\n```\n\n### Write STL to a file\n```c++\nstd::ofstream file(filename, std::ios::binary);\nif (!file.is_open()) {\n std::cerr << \"Error: Unable to open file '\" << filename << \"'\" << std::endl;\n}\n\nstd::vector<openstl::Triangle> originalTriangles{}; // User triangles\nopenstl::serialize(originalTriangles, file, openstl::StlFormat::Binary); // Or StlFormat::ASCII\n\nif (file.fail()) {\n std::cerr << \"Error: Failed to write to file \" << filename << std::endl;\n} else {\n std::cout << \"File \" << filename << \" has been successfully written.\" << std::endl;\n}\nfile.close();\n```\n\n### Serialize STL to a stream\n```c++\nstd::stringstream ss;\n\nstd::vector<openstl::Triangle> originalTriangles{}; // User triangles\nopenstl::serialize(originalTriangles, ss, openstl::StlFormat::Binary); // Or StlFormat::ASCII\n```\n\n### Convert Triangles :arrow_right: Vertices and Faces\n```c++\nusing namespace openstl\n\nstd::vector triangles = {\n // normal, vertices 0, vertices 1, vertices 2\n Triangle{{0.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}},\n Triangle{{0.0f, 0.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}, {4.0f, 4.0f, 4.0f}}\n};\n\nconst auto& [vertices, faces] = convertToVerticesAndFaces(triangles);\n```\n\n### Convert Vertices and Faces :arrow_right: Triangles\n```c++\nusing namespace openstl\n\nstd::vector vertices = {\n Vec3{0.0f, 0.0f, 0.0f}, Vec3{1.0f, 1.0f, 1.0f}, Vec3{2.0f, 2.0f, 2.0f}, Vec3{3.0f, 3.0f, 3.0f}\n};\nstd::vector<Face> faces = {\n {0, 1, 2}, {3, 1, 2}\n};\n\nconst auto& triangles = convertToTriangles(vertices, faces);\n```\n\n### Find Connected Components in Mesh Topology\n```c++\n#include <openstl/topology.hpp>\n#include <vector>\n#include <iostream>\n\nusing namespace openstl;\n\nint main() {\n std::vector<Vec3> vertices = {\n {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, // Component 1\n {2.0f, 2.0f, 0.0f}, {3.0f, 2.0f, 0.0f}, {2.5f, 3.0f, 0.0f} // Component 2\n };\n\n std::vector<Face> faces = {\n {0, 1, 2}, // Component 1\n {3, 4, 5}, // Component 2\n };\n\n const auto& connected_components = findConnectedComponents(vertices, faces);\n\n std::cout << \"Number of connected components: \" << connected_components.size() << \"\\\\n\";\n for (size_t i = 0; i < connected_components.size(); ++i) {\n std::cout << \"Component \" << i + 1 << \":\\\\n\";\n for (const auto& face : connected_components[i]) {\n std::cout << \" {\" << face[0] << \", \" << face[1] << \", \" << face[2] << \"}\\\\n\";\n }\n }\n\n return 0;\n}\n```\n****\n# Integrate to your C++ codebase\n### Smart method\nInclude this repository with CMAKE Fetchcontent and link your executable/library to `openstl::core` library. \nChoose weither you want to fetch a specific branch or tag using `GIT_TAG`. Use the `main` branch to keep updated with the latest improvements.\n```cmake\ninclude(FetchContent)\nFetchContent_Declare(\n openstl\n GIT_REPOSITORY https://github.com/Innoptech/OpenSTL.git\n GIT_TAG main\n GIT_SHALLOW TRUE\n GIT_PROGRESS TRUE\n)\nFetchContent_MakeAvailable(openstl)\n```\n### Na\u00efve method\nSimply add [stl.h](modules/core/include/openstl/core/stl.h) to your codebase.\n\n# Test\n```bash\ngit clone https://github.com/Innoptech/OpenSTL\nmkdir OpenSTL/build && cd OpenSTL/build\ncmake -DOPENSTL_BUILD_TESTS=ON .. && cmake --build .\nctest .\n```\n\n# Requirements\nC++17 or higher.\n\n\n# DISCLAIMER: STL File Format #\n\nThe STL file format, while widely used for 3D modeling and printing, was designed to be simple and easy to parse. However, this simplicity comes with some significant limitations:\n\n- Lack of Built-in Validation Mechanisms: The STL format does not include built-in mechanisms such as checksums, hashes, or any form of file validation. This makes it challenging to detect certain types of file corruption, such as a truncated header or malformed data. As a result, errors in file transmission, storage, or manipulation might go undetected.\n\n- Vulnerability to Corruption: Due to the lack of validation features, STL files can be easily corrupted. For example, if the file is truncated or contains invalid data, these issues may not be detected until the file is parsed or processed, potentially leading to crashes or undefined behavior in applications that use the file.\n\n- Potential for Buffer Overflow Attacks: The lack of built-in validation and the absence of bounds checking in the STL format can make it susceptible to buffer overflow attacks. Care should be taken when handling STL files, especially those from untrusted sources, to ensure they are properly validated before being used.\n\nThese limitations are inherent to the STL format and should be considered when working with or implementing software that processes STL files. Developers are encouraged to implement additional validation and error-handling mechanisms in their applications to mitigate these risks.\n",
"bugtrack_url": null,
"license": null,
"summary": "A simple STL serializer and deserializer",
"version": "1.3.0",
"project_urls": {
"Homepage": "https://github.com/Innoptech/OpenSTL"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f615359f482c1a84727047be5f6e858622837ac5a05ed33a5bf1529afc977693",
"md5": "cf76ad9e24f42d397977bcc6884fb2bb",
"sha256": "e79da3382cff9eceb96b37a78a64475bf2f5112863865cc3c884c51f41713a30"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "cf76ad9e24f42d397977bcc6884fb2bb",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 125950,
"upload_time": "2025-01-15T23:35:51",
"upload_time_iso_8601": "2025-01-15T23:35:51.399135Z",
"url": "https://files.pythonhosted.org/packages/f6/15/359f482c1a84727047be5f6e858622837ac5a05ed33a5bf1529afc977693/openstl-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4b4fa611628f2b8549e55c2eceff8836a666de14b049c2cd043682d166d2aa0e",
"md5": "1d7bb54e12590a0a269f629e6a0ffeaf",
"sha256": "515a425c276a981dd852162fd0858ef458383f35397ab25e896901c01313a1e0"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1d7bb54e12590a0a269f629e6a0ffeaf",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 116676,
"upload_time": "2025-01-15T23:35:54",
"upload_time_iso_8601": "2025-01-15T23:35:54.178088Z",
"url": "https://files.pythonhosted.org/packages/4b/4f/a611628f2b8549e55c2eceff8836a666de14b049c2cd043682d166d2aa0e/openstl-1.3.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "46e862087881142371493d133f7500afaab63240504ba86334b92413c3054a9f",
"md5": "2c4696a6be37fde7c84927d9efcb02f8",
"sha256": "40f0b2dad52651de67cb4a5030508a8de88e95062d5999b0aa76b7ce782db807"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "2c4696a6be37fde7c84927d9efcb02f8",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 181839,
"upload_time": "2025-01-15T23:35:55",
"upload_time_iso_8601": "2025-01-15T23:35:55.462857Z",
"url": "https://files.pythonhosted.org/packages/46/e8/62087881142371493d133f7500afaab63240504ba86334b92413c3054a9f/openstl-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9a8e900edc9844859b16908ed5ec416a7a4309cc48642c8ba99bb347647dbfa0",
"md5": "d03345241358b07abd2765db76ef0aca",
"sha256": "a0f1bc44f5b3fdf8dfe70a29aabc5e93a7f14c79c527faaa5b164d2ff693d36e"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d03345241358b07abd2765db76ef0aca",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 172777,
"upload_time": "2025-01-15T23:35:58",
"upload_time_iso_8601": "2025-01-15T23:35:58.032661Z",
"url": "https://files.pythonhosted.org/packages/9a/8e/900edc9844859b16908ed5ec416a7a4309cc48642c8ba99bb347647dbfa0/openstl-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4856654b95dd4bd4c5b4ca09ce91d5c62f49fdafeeb054f19135e0da25136523",
"md5": "bfd5424460169182b447cff19b8e69cf",
"sha256": "e9c81394d8764a3700186c50279e3e30e94ed1a5326122307c517bf87c8202ea"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "bfd5424460169182b447cff19b8e69cf",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 1241979,
"upload_time": "2025-01-15T23:36:00",
"upload_time_iso_8601": "2025-01-15T23:36:00.820999Z",
"url": "https://files.pythonhosted.org/packages/48/56/654b95dd4bd4c5b4ca09ce91d5c62f49fdafeeb054f19135e0da25136523/openstl-1.3.0-cp310-cp310-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b980abfa32b343da8762aef0177fb08023556a3932b081e2037b46807ef39790",
"md5": "aecbc39852e0358248d79153e2cc4510",
"sha256": "49b3454b7c2131403501397b689ca27b9db4930a479169fd80529337e1b83ef7"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "aecbc39852e0358248d79153e2cc4510",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 1140685,
"upload_time": "2025-01-15T23:36:05",
"upload_time_iso_8601": "2025-01-15T23:36:05.103148Z",
"url": "https://files.pythonhosted.org/packages/b9/80/abfa32b343da8762aef0177fb08023556a3932b081e2037b46807ef39790/openstl-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "50e6691ad7246a23293d61118a27d33c5066429868d52cff21aa7b712d419606",
"md5": "96aa4cad86419e6bf7edae669f4cf489",
"sha256": "2845c60fa67b60a7aa633920edad1b04d030d69202192529414ffb1effe4add9"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "96aa4cad86419e6bf7edae669f4cf489",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 124334,
"upload_time": "2025-01-15T23:36:08",
"upload_time_iso_8601": "2025-01-15T23:36:08.134890Z",
"url": "https://files.pythonhosted.org/packages/50/e6/691ad7246a23293d61118a27d33c5066429868d52cff21aa7b712d419606/openstl-1.3.0-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0ade733fff15c1ad0a1f622fd93ddf96c2c118361bdd54ea1128fe5554f6f963",
"md5": "2e9668224c3cada6cab9c6514f722611",
"sha256": "69afdee92faa561afc4db3378643f408538cae47d90db6b1327c6ed650957724"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "2e9668224c3cada6cab9c6514f722611",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.4",
"size": 145525,
"upload_time": "2025-01-15T23:36:12",
"upload_time_iso_8601": "2025-01-15T23:36:12.104802Z",
"url": "https://files.pythonhosted.org/packages/0a/de/733fff15c1ad0a1f622fd93ddf96c2c118361bdd54ea1128fe5554f6f963/openstl-1.3.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d5fa000c992a4d5d1e2e7c3cfa95c01e3f5f9d06fc66dd3e84cf4fbc652668d5",
"md5": "a82f390ef4cb1adcdaa6638aca33de9d",
"sha256": "d381b952cfc0fc5271b5e19b6d996937b61390c82e27cf28e6c51258ff52e2a9"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "a82f390ef4cb1adcdaa6638aca33de9d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 127264,
"upload_time": "2025-01-15T23:36:13",
"upload_time_iso_8601": "2025-01-15T23:36:13.636101Z",
"url": "https://files.pythonhosted.org/packages/d5/fa/000c992a4d5d1e2e7c3cfa95c01e3f5f9d06fc66dd3e84cf4fbc652668d5/openstl-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3439cb6596a89b9cb18350255a5405f007657bbac8010d8eac2cc4184a57b860",
"md5": "4587d57c63eed658b694324c32714cd5",
"sha256": "1b6c824d9c89383cf5e5cca88aab77e4746579cd94d314e0543dba7e8222b488"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "4587d57c63eed658b694324c32714cd5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 118116,
"upload_time": "2025-01-15T23:36:16",
"upload_time_iso_8601": "2025-01-15T23:36:16.339814Z",
"url": "https://files.pythonhosted.org/packages/34/39/cb6596a89b9cb18350255a5405f007657bbac8010d8eac2cc4184a57b860/openstl-1.3.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c16199e42ad92e913d09716d44aae7eecbf64ea5a2c3ff91a90a93c62fb924b0",
"md5": "a17ebcdf6892a5414a7407c4365b86c6",
"sha256": "3bbc9dcc7b0dd174f1953ed07a5a7eacff766348c8f8c1b624ac515ead1c8bff"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "a17ebcdf6892a5414a7407c4365b86c6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 182604,
"upload_time": "2025-01-15T23:36:18",
"upload_time_iso_8601": "2025-01-15T23:36:18.870788Z",
"url": "https://files.pythonhosted.org/packages/c1/61/99e42ad92e913d09716d44aae7eecbf64ea5a2c3ff91a90a93c62fb924b0/openstl-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5db6fda4e47b0bb015f28bae32e0d9bc4ff057da0fe90ac8a0c4ba6c3ad568f1",
"md5": "0f664db899c99edce5340e2669a7b47b",
"sha256": "875c334c64f5c2b68cf6bb2ba775dca519c9a60ab0d7c0f09d2ed8686e0dfef5"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0f664db899c99edce5340e2669a7b47b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 173556,
"upload_time": "2025-01-15T23:36:20",
"upload_time_iso_8601": "2025-01-15T23:36:20.395675Z",
"url": "https://files.pythonhosted.org/packages/5d/b6/fda4e47b0bb015f28bae32e0d9bc4ff057da0fe90ac8a0c4ba6c3ad568f1/openstl-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "199c1e1fc8a7132e2492aad5013bdd088429bbd4f7803c8d12e9bd91e44336b1",
"md5": "e06c245f9ec37277726bc7699f71b219",
"sha256": "b7a618a3cc99d4a87651a78025616e87cc49d420ce44bd160a506b1ef6a1dbb9"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "e06c245f9ec37277726bc7699f71b219",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 1242483,
"upload_time": "2025-01-15T23:36:23",
"upload_time_iso_8601": "2025-01-15T23:36:23.184211Z",
"url": "https://files.pythonhosted.org/packages/19/9c/1e1fc8a7132e2492aad5013bdd088429bbd4f7803c8d12e9bd91e44336b1/openstl-1.3.0-cp311-cp311-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c73ed3c55976e7672bc7e492d6adf06b1ff48e6106089cda46e2a66412d74999",
"md5": "c61c47d7ea5592b06f93db487172d28f",
"sha256": "c145d7cada707cc4714b309e366ca6a912f0740ff009943357792318835b0ec2"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "c61c47d7ea5592b06f93db487172d28f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 1141887,
"upload_time": "2025-01-15T23:36:26",
"upload_time_iso_8601": "2025-01-15T23:36:26.029552Z",
"url": "https://files.pythonhosted.org/packages/c7/3e/d3c55976e7672bc7e492d6adf06b1ff48e6106089cda46e2a66412d74999/openstl-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "45c0a30db8b65e848e3e5ee8e231aa6c953d604c5117a222281f083c6575f3d9",
"md5": "002ac991994e2749419bac575af48ba5",
"sha256": "d60dfea7c8d9db57aaa56836623ef2c2b6ccac38dec0e844c08961afe53703db"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "002ac991994e2749419bac575af48ba5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 125607,
"upload_time": "2025-01-15T23:36:31",
"upload_time_iso_8601": "2025-01-15T23:36:31.738669Z",
"url": "https://files.pythonhosted.org/packages/45/c0/a30db8b65e848e3e5ee8e231aa6c953d604c5117a222281f083c6575f3d9/openstl-1.3.0-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f7b0b812c1cb1aeda68882f511262ea247ccb2046c25d05ea1ccf5b28d45363f",
"md5": "b984cc92b2e78b8ecea33f603e257286",
"sha256": "44279a17b3d0c5ba23accd6246eb7f717f3eb3186fa2e4353c292f09a996af29"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "b984cc92b2e78b8ecea33f603e257286",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.4",
"size": 146994,
"upload_time": "2025-01-15T23:36:33",
"upload_time_iso_8601": "2025-01-15T23:36:33.138458Z",
"url": "https://files.pythonhosted.org/packages/f7/b0/b812c1cb1aeda68882f511262ea247ccb2046c25d05ea1ccf5b28d45363f/openstl-1.3.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e07305d583f4d9082676e6f456020685830066db224cde1047719cd63638fd34",
"md5": "eccae2691b6b1f4c0b0d6c849db11706",
"sha256": "1e6bb539b031c8b10d922c74bff147af3e9a04a859007caaeae5878a55e10544"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "eccae2691b6b1f4c0b0d6c849db11706",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 127840,
"upload_time": "2025-01-15T23:36:36",
"upload_time_iso_8601": "2025-01-15T23:36:36.143589Z",
"url": "https://files.pythonhosted.org/packages/e0/73/05d583f4d9082676e6f456020685830066db224cde1047719cd63638fd34/openstl-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a3bd25dc5ea757caf25f9480b405e40bb4d0879b52a61cbbbb4543ae4f419b5a",
"md5": "f94b605bf588cd0c66f0b665c43e7666",
"sha256": "42e64ced556a848c1048f9ce3c58ba34a2e1af1ae41b6b90c1f631add696817e"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f94b605bf588cd0c66f0b665c43e7666",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 118193,
"upload_time": "2025-01-15T23:36:38",
"upload_time_iso_8601": "2025-01-15T23:36:38.338573Z",
"url": "https://files.pythonhosted.org/packages/a3/bd/25dc5ea757caf25f9480b405e40bb4d0879b52a61cbbbb4543ae4f419b5a/openstl-1.3.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f1fd9ca3c19d1f637ca0dac604e37fb2f8f13b788f919a9db8a066c23ffc92d9",
"md5": "217ed3b130bb21340d5061861f2101f8",
"sha256": "4b1d0d510c5b9f726db6fc9a9e7d1df5d07d6f1c7bbd57dc3126123c263f4c48"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "217ed3b130bb21340d5061861f2101f8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 182566,
"upload_time": "2025-01-15T23:36:39",
"upload_time_iso_8601": "2025-01-15T23:36:39.873238Z",
"url": "https://files.pythonhosted.org/packages/f1/fd/9ca3c19d1f637ca0dac604e37fb2f8f13b788f919a9db8a066c23ffc92d9/openstl-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b8dd639faf7de66a1e719a1e143ffcdabc9ec8c7a029939fcdc8092ae73100dc",
"md5": "02f8c6a4fac0f149ffb4aa889aec4dc8",
"sha256": "6417fcd5a8cc212bb4c4825dced3d658ea6f4a5de161f1b49b96c63fca1be908"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "02f8c6a4fac0f149ffb4aa889aec4dc8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 173429,
"upload_time": "2025-01-15T23:36:42",
"upload_time_iso_8601": "2025-01-15T23:36:42.806902Z",
"url": "https://files.pythonhosted.org/packages/b8/dd/639faf7de66a1e719a1e143ffcdabc9ec8c7a029939fcdc8092ae73100dc/openstl-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b023ec04dfe0881747599c5d861bea7a7bbb72a350bdbe83360f7dbf464ed574",
"md5": "df43889db52b1614ecfd874759f0edd6",
"sha256": "264d4c253b5d9107e7b4242acc4c88bb995029fa5674ca239315daee2763e271"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "df43889db52b1614ecfd874759f0edd6",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 1242676,
"upload_time": "2025-01-15T23:36:46",
"upload_time_iso_8601": "2025-01-15T23:36:46.915100Z",
"url": "https://files.pythonhosted.org/packages/b0/23/ec04dfe0881747599c5d861bea7a7bbb72a350bdbe83360f7dbf464ed574/openstl-1.3.0-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3d59b46ad7954bfffa8268274b7a38d4b20b284cf41a5ebdb85f7abce31a5a3d",
"md5": "d2a9de769e87d038e2ee1bdfdf0fe36a",
"sha256": "42e5d96a3c867b490b841ebddbe734b44d3fc871e77c3add2076969ac4eabdb6"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "d2a9de769e87d038e2ee1bdfdf0fe36a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 1142164,
"upload_time": "2025-01-15T23:36:48",
"upload_time_iso_8601": "2025-01-15T23:36:48.825246Z",
"url": "https://files.pythonhosted.org/packages/3d/59/b46ad7954bfffa8268274b7a38d4b20b284cf41a5ebdb85f7abce31a5a3d/openstl-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b152efb89beff494d2e316f46c085e552fb9fec24c46144bffea5aac967c7c65",
"md5": "0069c90e166b6730111be5e1093696ec",
"sha256": "6818b6689c8d628280e10141583f9390f12061dbb651793c844645c50921ef64"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "0069c90e166b6730111be5e1093696ec",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 124857,
"upload_time": "2025-01-15T23:36:50",
"upload_time_iso_8601": "2025-01-15T23:36:50.730443Z",
"url": "https://files.pythonhosted.org/packages/b1/52/efb89beff494d2e316f46c085e552fb9fec24c46144bffea5aac967c7c65/openstl-1.3.0-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ccabf9c9b29f91f2c7d1b1a3a42a2cbb7326758f4d51b3f7c137c2c296fceafa",
"md5": "db5162dd3928e8c060e0a8ea26dd5978",
"sha256": "75eb7995689e2529dd31c441228a9a3f7a0e3c32e97ff7dfd2c190475382dad1"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "db5162dd3928e8c060e0a8ea26dd5978",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.4",
"size": 146676,
"upload_time": "2025-01-15T23:36:52",
"upload_time_iso_8601": "2025-01-15T23:36:52.491201Z",
"url": "https://files.pythonhosted.org/packages/cc/ab/f9c9b29f91f2c7d1b1a3a42a2cbb7326758f4d51b3f7c137c2c296fceafa/openstl-1.3.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8cc9d8aeed8f6371ef1b728b945c593a1f5e9d31647cf721c138872443d3d8e0",
"md5": "a824534eddd3a47c73d40b0e37280363",
"sha256": "169254ed73705859e0019637fda6f23f128870cc73e09c7f4baae0dbdd267941"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "a824534eddd3a47c73d40b0e37280363",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 127581,
"upload_time": "2025-01-15T23:36:53",
"upload_time_iso_8601": "2025-01-15T23:36:53.833986Z",
"url": "https://files.pythonhosted.org/packages/8c/c9/d8aeed8f6371ef1b728b945c593a1f5e9d31647cf721c138872443d3d8e0/openstl-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8b0fb9bfc17249e6158a55f64d18b95d9bbf37a672ed991479937b74205ea2e9",
"md5": "586d6f76026b01a2190cfb6c632ec1e9",
"sha256": "95cfc1756b63afc930f8284862999f9020c3bcdc555a6261f08ec6280aeda645"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "586d6f76026b01a2190cfb6c632ec1e9",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 118195,
"upload_time": "2025-01-15T23:36:56",
"upload_time_iso_8601": "2025-01-15T23:36:56.038449Z",
"url": "https://files.pythonhosted.org/packages/8b/0f/b9bfc17249e6158a55f64d18b95d9bbf37a672ed991479937b74205ea2e9/openstl-1.3.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "83a782269cd1748b0565c73c53f5ed90ca8319b27b4cb632c74709fc0d8b8cc4",
"md5": "adf1ea3e4b66418279a09de189631662",
"sha256": "7d46f7d065d385d53416878dd73ceea2678990f40a2dace2f90d4814cb55717d"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "adf1ea3e4b66418279a09de189631662",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 182578,
"upload_time": "2025-01-15T23:36:57",
"upload_time_iso_8601": "2025-01-15T23:36:57.810789Z",
"url": "https://files.pythonhosted.org/packages/83/a7/82269cd1748b0565c73c53f5ed90ca8319b27b4cb632c74709fc0d8b8cc4/openstl-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d992bb2e5b389b730cf92bc49146f6973cb7e47c2d15a03fc7049f19108860af",
"md5": "6fa70975265cf62bdcf7464ed4a0b1de",
"sha256": "4bd882f454aeaa22712396eaa306d8446b8d09a4410520f17cb900c66f5c85b1"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6fa70975265cf62bdcf7464ed4a0b1de",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 173374,
"upload_time": "2025-01-15T23:37:00",
"upload_time_iso_8601": "2025-01-15T23:37:00.540374Z",
"url": "https://files.pythonhosted.org/packages/d9/92/bb2e5b389b730cf92bc49146f6973cb7e47c2d15a03fc7049f19108860af/openstl-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9d1d23eb46aafe3c827b912d2fb1072d20a93d187521a7f467953014a8faa833",
"md5": "8b44d1e287c0bb8977d8928352fa7ecf",
"sha256": "ebfb3ab89d7d0943cced1e73d231a9e02648f89dc47612ea1a3b2dcf78e97991"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "8b44d1e287c0bb8977d8928352fa7ecf",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 1242970,
"upload_time": "2025-01-15T23:37:03",
"upload_time_iso_8601": "2025-01-15T23:37:03.408922Z",
"url": "https://files.pythonhosted.org/packages/9d/1d/23eb46aafe3c827b912d2fb1072d20a93d187521a7f467953014a8faa833/openstl-1.3.0-cp313-cp313-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f9a898f92bb95e1b6145f2d65e2fec7043c5475f2381a180b3b9ab1a303e6b6b",
"md5": "55a84c8da097f5f957e636f2ebea49f0",
"sha256": "efc4c8717f672645f236f96e07de81113d3d280de3808d67ca304dc4998c27a6"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "55a84c8da097f5f957e636f2ebea49f0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 1142163,
"upload_time": "2025-01-15T23:37:05",
"upload_time_iso_8601": "2025-01-15T23:37:05.219165Z",
"url": "https://files.pythonhosted.org/packages/f9/a8/98f92bb95e1b6145f2d65e2fec7043c5475f2381a180b3b9ab1a303e6b6b/openstl-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a79cef883ce63173876ce05ade0690a275d6907c6c1167dc3299ae31cd11d276",
"md5": "35d98f743443909848a272272ada6785",
"sha256": "2b68605c7e859f90d1ef4dc00a0e6697db37597ada9ad7feb145681e8902cd36"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "35d98f743443909848a272272ada6785",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 125466,
"upload_time": "2025-01-15T23:37:06",
"upload_time_iso_8601": "2025-01-15T23:37:06.876098Z",
"url": "https://files.pythonhosted.org/packages/a7/9c/ef883ce63173876ce05ade0690a275d6907c6c1167dc3299ae31cd11d276/openstl-1.3.0-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0a93ec423dc4cbb54a39129ea717ce77b6a1da2341043fb68d812568e606987f",
"md5": "7e178ce03ec398635633a537d535f41b",
"sha256": "535f4049654639a89c9237d00c0237e24e69fcb4b07e5d97b50e006fdfbbdd8c"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "7e178ce03ec398635633a537d535f41b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.4",
"size": 147589,
"upload_time": "2025-01-15T23:37:08",
"upload_time_iso_8601": "2025-01-15T23:37:08.127006Z",
"url": "https://files.pythonhosted.org/packages/0a/93/ec423dc4cbb54a39129ea717ce77b6a1da2341043fb68d812568e606987f/openstl-1.3.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3cbc421e16c5116cff1d25b7905612c8398048cbb37329af382269f225289ae0",
"md5": "0d9540babb110945693381c80fbea20f",
"sha256": "4c4b55cce5a2b3deb5df7eb418cefeaec6441fe7e5515c4101095acc02214ae2"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "0d9540babb110945693381c80fbea20f",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 125278,
"upload_time": "2025-01-15T23:37:09",
"upload_time_iso_8601": "2025-01-15T23:37:09.466393Z",
"url": "https://files.pythonhosted.org/packages/3c/bc/421e16c5116cff1d25b7905612c8398048cbb37329af382269f225289ae0/openstl-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7388fb3b6ef3a668f29f60f2aea13914d6b1bb62adad2bcc8f9d8e02c25bf911",
"md5": "8a405de9659300dc868ee69c79295d19",
"sha256": "16c5f092c0acc6a4e22f4ad49581ece736ee711275f42db1d2b21c1a917f6773"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "8a405de9659300dc868ee69c79295d19",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 179874,
"upload_time": "2025-01-15T23:37:10",
"upload_time_iso_8601": "2025-01-15T23:37:10.844428Z",
"url": "https://files.pythonhosted.org/packages/73/88/fb3b6ef3a668f29f60f2aea13914d6b1bb62adad2bcc8f9d8e02c25bf911/openstl-1.3.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0579486be53f273553480d40d3b1259827e10b77ad1f60a84d4708966e38e3e6",
"md5": "f8c434c7c2adf87c8c9798f1287851af",
"sha256": "2bf2b762134419198459a7f691069727dcee5196811d19179e13d1e1e041b242"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f8c434c7c2adf87c8c9798f1287851af",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 170691,
"upload_time": "2025-01-15T23:37:12",
"upload_time_iso_8601": "2025-01-15T23:37:12.632545Z",
"url": "https://files.pythonhosted.org/packages/05/79/486be53f273553480d40d3b1259827e10b77ad1f60a84d4708966e38e3e6/openstl-1.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b8a9d45db3100f02ce1db02805f2bc62eab95a17a0764eb5f3296df4a692063",
"md5": "93e487226f99b3545ff0520924bd42d4",
"sha256": "30ff5602d322c9f4f5fed797424e80119979af653da54f570a5498f0f8edee15"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "93e487226f99b3545ff0520924bd42d4",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 1240492,
"upload_time": "2025-01-15T23:37:14",
"upload_time_iso_8601": "2025-01-15T23:37:14.285887Z",
"url": "https://files.pythonhosted.org/packages/5b/8a/9d45db3100f02ce1db02805f2bc62eab95a17a0764eb5f3296df4a692063/openstl-1.3.0-cp36-cp36m-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "911af62a14d92f4cb92e4bb4180cbbc0d06867a69e57a07ecbcb3d4685429b97",
"md5": "a7285a87e26b88ef505bc3543aa903c4",
"sha256": "ce973d5d5acdf718262e24f59e54ad713b5e340c28982f6851acd557e8f1e94d"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "a7285a87e26b88ef505bc3543aa903c4",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 1139326,
"upload_time": "2025-01-15T23:37:19",
"upload_time_iso_8601": "2025-01-15T23:37:19.887187Z",
"url": "https://files.pythonhosted.org/packages/91/1a/f62a14d92f4cb92e4bb4180cbbc0d06867a69e57a07ecbcb3d4685429b97/openstl-1.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "23bab068f0c4fe9f1ce6dd378d2fe9237716e2b660609d4c53af59f8e2d25dd9",
"md5": "3f27d024699691cf43e0d5a20794eced",
"sha256": "022167a50461e4f3ce748f23dedd4710e912b1565922047612ae208f1e474a54"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-win32.whl",
"has_sig": false,
"md5_digest": "3f27d024699691cf43e0d5a20794eced",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 124322,
"upload_time": "2025-01-15T23:37:21",
"upload_time_iso_8601": "2025-01-15T23:37:21.484810Z",
"url": "https://files.pythonhosted.org/packages/23/ba/b068f0c4fe9f1ce6dd378d2fe9237716e2b660609d4c53af59f8e2d25dd9/openstl-1.3.0-cp36-cp36m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9190456704551fee537aa8065799ce8e6ab3e3df1defebec2af6a46b4103551e",
"md5": "b2d4445bfeb576bdcfbec2cdad677901",
"sha256": "ec4610b63a8f66404d148065ac2781f46458ec74037330b48b151684742f5198"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "b2d4445bfeb576bdcfbec2cdad677901",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.4",
"size": 144604,
"upload_time": "2025-01-15T23:37:22",
"upload_time_iso_8601": "2025-01-15T23:37:22.798978Z",
"url": "https://files.pythonhosted.org/packages/91/90/456704551fee537aa8065799ce8e6ab3e3df1defebec2af6a46b4103551e/openstl-1.3.0-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "04059f1a07483fe854938adfc4336374ff52389afbc221d8233413dedcc271d4",
"md5": "0aed83ddcdcc28e62cfd15b16fdcda33",
"sha256": "ca282fde14d1516ed925077c6f0a4fb4c1f5b30b5abbdf24b4fdb4f4864aeca2"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "0aed83ddcdcc28e62cfd15b16fdcda33",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 125414,
"upload_time": "2025-01-15T23:37:24",
"upload_time_iso_8601": "2025-01-15T23:37:24.623991Z",
"url": "https://files.pythonhosted.org/packages/04/05/9f1a07483fe854938adfc4336374ff52389afbc221d8233413dedcc271d4/openstl-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d0dbf515d8e488cac0aad11e97f14e3539c8b6789e0b3a34c1243af0aeb67810",
"md5": "9d2192101b02f5712ad6bcc9cd505ad6",
"sha256": "fe104c60ffbaa5577bba7f67a7e5ce38082b8e80964669a12215a434a5133765"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "9d2192101b02f5712ad6bcc9cd505ad6",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 179755,
"upload_time": "2025-01-15T23:37:25",
"upload_time_iso_8601": "2025-01-15T23:37:25.896078Z",
"url": "https://files.pythonhosted.org/packages/d0/db/f515d8e488cac0aad11e97f14e3539c8b6789e0b3a34c1243af0aeb67810/openstl-1.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cbe11f2f0b8a7c5569c8c5cf8c2d095780bc845cba3c3499f1ebc5d84e2165c8",
"md5": "c8dc42d94daaf270c7d782d5897f0eed",
"sha256": "462b6b1e2dbd922818fdede08407ee04ba0e9056b60460cc044162b665dd7796"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c8dc42d94daaf270c7d782d5897f0eed",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 170535,
"upload_time": "2025-01-15T23:37:27",
"upload_time_iso_8601": "2025-01-15T23:37:27.651066Z",
"url": "https://files.pythonhosted.org/packages/cb/e1/1f2f0b8a7c5569c8c5cf8c2d095780bc845cba3c3499f1ebc5d84e2165c8/openstl-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "62d01e06b74162d61a5e5e4c087c29eef2a2ad83c108248f582688d09074cd95",
"md5": "49d4e035fa69b7cc9ff7238a28ae9992",
"sha256": "1c2b45cdd31961236b7ce6c0c4bb80aecd373194ae0f2a92c7031bc4dd226edf"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "49d4e035fa69b7cc9ff7238a28ae9992",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 1240501,
"upload_time": "2025-01-15T23:37:29",
"upload_time_iso_8601": "2025-01-15T23:37:29.191679Z",
"url": "https://files.pythonhosted.org/packages/62/d0/1e06b74162d61a5e5e4c087c29eef2a2ad83c108248f582688d09074cd95/openstl-1.3.0-cp37-cp37m-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1bf550a5851914fb3130f5cb9633929c649ec6b1da61ec3a7ba464364e6875eb",
"md5": "4f306ad6ef6c579b1d2fe984e08d9840",
"sha256": "02957287780ef697d35a6e59d5647b3d707c4acfd5e89ae011651bbc81f4eded"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "4f306ad6ef6c579b1d2fe984e08d9840",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 1139198,
"upload_time": "2025-01-15T23:37:31",
"upload_time_iso_8601": "2025-01-15T23:37:31.422300Z",
"url": "https://files.pythonhosted.org/packages/1b/f5/50a5851914fb3130f5cb9633929c649ec6b1da61ec3a7ba464364e6875eb/openstl-1.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fdeb468ebf7396204a335d5d86c2b4196e54b05f6a4f188805eb039a22449ebd",
"md5": "ece58e81682e822bd5704dce6c992432",
"sha256": "40435ba95d96b1cf0fc72d989ed5d62d0357ab9a4cb3b675bcac8374c6437a10"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-win32.whl",
"has_sig": false,
"md5_digest": "ece58e81682e822bd5704dce6c992432",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 124493,
"upload_time": "2025-01-15T23:37:34",
"upload_time_iso_8601": "2025-01-15T23:37:34.943038Z",
"url": "https://files.pythonhosted.org/packages/fd/eb/468ebf7396204a335d5d86c2b4196e54b05f6a4f188805eb039a22449ebd/openstl-1.3.0-cp37-cp37m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "54d6ea634ae50f3ff3e9430050dcd4302b8cae45632c5551de26018448314a16",
"md5": "99176c7b922c242940717cfb15154410",
"sha256": "1dcc6a4d1c8b4666b313507c5e0ba38d4040d7d9833d7ca1fe4da398cf423507"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "99176c7b922c242940717cfb15154410",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.4",
"size": 144816,
"upload_time": "2025-01-15T23:37:36",
"upload_time_iso_8601": "2025-01-15T23:37:36.241803Z",
"url": "https://files.pythonhosted.org/packages/54/d6/ea634ae50f3ff3e9430050dcd4302b8cae45632c5551de26018448314a16/openstl-1.3.0-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "90e8d2eba80698ed956b4021a3fd8c76a424b5713c5c3f0f4ad073c14fcfe1d7",
"md5": "6ce0bf840a05e841ab6e1956bbd9f3e1",
"sha256": "bdcc66122191784064c848296ebfd42cc440f98dc11ac1d7223dd61fb8198328"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "6ce0bf840a05e841ab6e1956bbd9f3e1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 125750,
"upload_time": "2025-01-15T23:37:39",
"upload_time_iso_8601": "2025-01-15T23:37:39.086797Z",
"url": "https://files.pythonhosted.org/packages/90/e8/d2eba80698ed956b4021a3fd8c76a424b5713c5c3f0f4ad073c14fcfe1d7/openstl-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2e887b2100c6cf434dbba59d0e2a85a4ebf4eca4229da1e7ddaeefe11f0c4e80",
"md5": "c4fcdf4ce65ccbd01b80f1ca6d49b836",
"sha256": "eb6ab009071587c358e3322f7c73803970b2912ca5c8259504fd363174d4a0e7"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c4fcdf4ce65ccbd01b80f1ca6d49b836",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 116506,
"upload_time": "2025-01-15T23:37:40",
"upload_time_iso_8601": "2025-01-15T23:37:40.758741Z",
"url": "https://files.pythonhosted.org/packages/2e/88/7b2100c6cf434dbba59d0e2a85a4ebf4eca4229da1e7ddaeefe11f0c4e80/openstl-1.3.0-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c3298db3067c2fc6896415f2e2ec16a6043d825c4f800f098951101834ef5468",
"md5": "5a4e7bfbdf181c2dd7ab5bdaa8550267",
"sha256": "98e6c5b3818dc0051c8f3044887bdf7f22f0bd7ece0c39d2aa4657ea87025d1a"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "5a4e7bfbdf181c2dd7ab5bdaa8550267",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 181235,
"upload_time": "2025-01-15T23:37:42",
"upload_time_iso_8601": "2025-01-15T23:37:42.033374Z",
"url": "https://files.pythonhosted.org/packages/c3/29/8db3067c2fc6896415f2e2ec16a6043d825c4f800f098951101834ef5468/openstl-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "514d4662992e9fa5f9d49bd92ee00dd4ef223bf6bb05fbdac84afa6ebed26c4e",
"md5": "f7c6c66cffc5b6cffad4bced904f2ef2",
"sha256": "d95e684386cfc6ad24dfb3711ca98476354ccd4c3da13cbe94116053a2c87ca0"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f7c6c66cffc5b6cffad4bced904f2ef2",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 172566,
"upload_time": "2025-01-15T23:37:43",
"upload_time_iso_8601": "2025-01-15T23:37:43.458022Z",
"url": "https://files.pythonhosted.org/packages/51/4d/4662992e9fa5f9d49bd92ee00dd4ef223bf6bb05fbdac84afa6ebed26c4e/openstl-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1be76c0d4cda9ebea6bcf81ad3e98a5ec7c95e36845be41a66838d58b875050a",
"md5": "893766aff80f07028b229525ac6d52c1",
"sha256": "90a0836ac2f98e15b252d1f61c787a6e91f2d1a332ea916d614afb0035cb0be1"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "893766aff80f07028b229525ac6d52c1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 1241675,
"upload_time": "2025-01-15T23:37:45",
"upload_time_iso_8601": "2025-01-15T23:37:45.588964Z",
"url": "https://files.pythonhosted.org/packages/1b/e7/6c0d4cda9ebea6bcf81ad3e98a5ec7c95e36845be41a66838d58b875050a/openstl-1.3.0-cp38-cp38-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8bfa421635698aa963214040340df5b727937d8978d948d97258a06b2a62a65c",
"md5": "8546b8c03480ff87963365e7271463df",
"sha256": "3cee198d3799f396a36044127e7cc67fb4042efdbb9bf79a824a51dd18050c72"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "8546b8c03480ff87963365e7271463df",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 1140298,
"upload_time": "2025-01-15T23:37:47",
"upload_time_iso_8601": "2025-01-15T23:37:47.376008Z",
"url": "https://files.pythonhosted.org/packages/8b/fa/421635698aa963214040340df5b727937d8978d948d97258a06b2a62a65c/openstl-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "101a07728dbf78b5825bfe0a39e77706ac5f8cae761b5687e504504c9f9f7170",
"md5": "81443cea195a4e83fa1545e88e3c9acf",
"sha256": "713863a5f31126eb169eb8bb2e0c5b373537fd6cf046fd642142c28cae8c4ae1"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "81443cea195a4e83fa1545e88e3c9acf",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 124206,
"upload_time": "2025-01-15T23:37:48",
"upload_time_iso_8601": "2025-01-15T23:37:48.876888Z",
"url": "https://files.pythonhosted.org/packages/10/1a/07728dbf78b5825bfe0a39e77706ac5f8cae761b5687e504504c9f9f7170/openstl-1.3.0-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c8b6eca9af3f660884d9cceab096b2a52bac4baef2a59ab059496261e32352a0",
"md5": "b4643678891cfd4c127659eeb1368116",
"sha256": "ced025db49ebfa36adb1f914cfda3d55cfd0bdee0107abdfe8e01770e4112952"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "b4643678891cfd4c127659eeb1368116",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.4",
"size": 145314,
"upload_time": "2025-01-15T23:37:50",
"upload_time_iso_8601": "2025-01-15T23:37:50.336924Z",
"url": "https://files.pythonhosted.org/packages/c8/b6/eca9af3f660884d9cceab096b2a52bac4baef2a59ab059496261e32352a0/openstl-1.3.0-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "24752e7b0cd4dbdde1fea71a53ece660542254ae58e1d927a044409edac52154",
"md5": "8cf4143f7ba135c6553d0c3d81badf7e",
"sha256": "3779468650ec6f7cad31a4d5935530388e57db1353a8da1d736d1f92ac967477"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "8cf4143f7ba135c6553d0c3d81badf7e",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 126049,
"upload_time": "2025-01-15T23:37:53",
"upload_time_iso_8601": "2025-01-15T23:37:53.250236Z",
"url": "https://files.pythonhosted.org/packages/24/75/2e7b0cd4dbdde1fea71a53ece660542254ae58e1d927a044409edac52154/openstl-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9181c4d0748b20c18f0ff492e4571ccb82c860d891120d2a65a3fb43d751ec0b",
"md5": "6e308a5161b4223ab3dd769ae9446c3f",
"sha256": "c2f84d9094a3cbc3c9dc5eb9697929dac50c8554a8da0356189139440d105a1d"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6e308a5161b4223ab3dd769ae9446c3f",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 116796,
"upload_time": "2025-01-15T23:37:55",
"upload_time_iso_8601": "2025-01-15T23:37:55.189795Z",
"url": "https://files.pythonhosted.org/packages/91/81/c4d0748b20c18f0ff492e4571ccb82c860d891120d2a65a3fb43d751ec0b/openstl-1.3.0-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "20f8070eb37701784e553af64fcac5feca414b3a81fd52d64a991654893e9e7b",
"md5": "ad8cd7a0d2c1cd23aeb3beea4e2926aa",
"sha256": "81f5bd080c0b0c49cefbd1d1a9e0e39b826da4a5e6b464f2cb14dae435a90bc3"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "ad8cd7a0d2c1cd23aeb3beea4e2926aa",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 182012,
"upload_time": "2025-01-15T23:37:56",
"upload_time_iso_8601": "2025-01-15T23:37:56.555166Z",
"url": "https://files.pythonhosted.org/packages/20/f8/070eb37701784e553af64fcac5feca414b3a81fd52d64a991654893e9e7b/openstl-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5e9f31e2bf40887e5889c81ea75ee7bf526ce926b78f5e4f2884da6d3d5e6c79",
"md5": "6b73ea7ab7ae661875457db16e5067e8",
"sha256": "28b6b6d5369e1c4fa128e7bd6bb62f2f138fe4e1f00cd6fcb1e0ac3b5c0e6861"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6b73ea7ab7ae661875457db16e5067e8",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 173005,
"upload_time": "2025-01-15T23:37:57",
"upload_time_iso_8601": "2025-01-15T23:37:57.943426Z",
"url": "https://files.pythonhosted.org/packages/5e/9f/31e2bf40887e5889c81ea75ee7bf526ce926b78f5e4f2884da6d3d5e6c79/openstl-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a5f71b9c65eabd869325b2891f44041f39be7e7137cf151de300d551ec357c15",
"md5": "687babf80ab155299ceffbfa350cc205",
"sha256": "9f9402bc01c69443aaf3aead542ba6946641cea5318bc683ac3d929d5efebc76"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "687babf80ab155299ceffbfa350cc205",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 1242318,
"upload_time": "2025-01-15T23:37:59",
"upload_time_iso_8601": "2025-01-15T23:37:59.511432Z",
"url": "https://files.pythonhosted.org/packages/a5/f7/1b9c65eabd869325b2891f44041f39be7e7137cf151de300d551ec357c15/openstl-1.3.0-cp39-cp39-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aa4c101a165d2d7959eb0ca9f26e5797d0bf167e140cfe045e325b739aeed5ab",
"md5": "0380f8370ff6ad530a5321abe2e4812a",
"sha256": "89ffcc08858eefd94f8a63b47a5ca0438b563d6ef9e35de4cfdfb20eebc667b9"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "0380f8370ff6ad530a5321abe2e4812a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 1140952,
"upload_time": "2025-01-15T23:38:01",
"upload_time_iso_8601": "2025-01-15T23:38:01.193826Z",
"url": "https://files.pythonhosted.org/packages/aa/4c/101a165d2d7959eb0ca9f26e5797d0bf167e140cfe045e325b739aeed5ab/openstl-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "226d3f0369180243cee370c0b40d9e309d458dd967949d027cf72e6d978b0273",
"md5": "d848e3ac5a3dd5b981e0be98a3296594",
"sha256": "1f3d788f7aa9767805abcb12d035ef1af944dc5e16636eaebc3e5b87f6779871"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "d848e3ac5a3dd5b981e0be98a3296594",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 124419,
"upload_time": "2025-01-15T23:38:02",
"upload_time_iso_8601": "2025-01-15T23:38:02.891904Z",
"url": "https://files.pythonhosted.org/packages/22/6d/3f0369180243cee370c0b40d9e309d458dd967949d027cf72e6d978b0273/openstl-1.3.0-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e9baf67c1632c241690b6ecb178c1efc45a30cb0b3607115c111e22209b78330",
"md5": "1c50ce89abc712bedf778793ec0e2996",
"sha256": "6023a434f1b2a5a70a3501d371d5d285ca70da459118a760338ddf3908051402"
},
"downloads": -1,
"filename": "openstl-1.3.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "1c50ce89abc712bedf778793ec0e2996",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.4",
"size": 145474,
"upload_time": "2025-01-15T23:38:04",
"upload_time_iso_8601": "2025-01-15T23:38:04.242589Z",
"url": "https://files.pythonhosted.org/packages/e9/ba/f67c1632c241690b6ecb178c1efc45a30cb0b3607115c111e22209b78330/openstl-1.3.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7b3b4307f7b5fdd90fbf044c8d15da3aab01015fcc9f4b594a5c7bafd5f250b7",
"md5": "6787d12d3850d580c7fdfe9b9e2905e2",
"sha256": "2c76aa6ecd80c16b738d5215145792fdd4195aec30e9f69cf91df7ac44ca73a2"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"has_sig": false,
"md5_digest": "6787d12d3850d580c7fdfe9b9e2905e2",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.4",
"size": 125598,
"upload_time": "2025-01-15T23:38:05",
"upload_time_iso_8601": "2025-01-15T23:38:05.667565Z",
"url": "https://files.pythonhosted.org/packages/7b/3b/4307f7b5fdd90fbf044c8d15da3aab01015fcc9f4b594a5c7bafd5f250b7/openstl-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "15fac6e14c976d6ac199303cb1aee449b2dfe937734a4241824690526f14a693",
"md5": "d8f6af01ac76d6d1ab3349013c3f2848",
"sha256": "dcdb023f5e277f2827c23b1f11c1be242ed9b8b50a9673d4ad2c1f930f384a63"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d8f6af01ac76d6d1ab3349013c3f2848",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.4",
"size": 116274,
"upload_time": "2025-01-15T23:38:07",
"upload_time_iso_8601": "2025-01-15T23:38:07.285957Z",
"url": "https://files.pythonhosted.org/packages/15/fa/c6e14c976d6ac199303cb1aee449b2dfe937734a4241824690526f14a693/openstl-1.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3d1b7cabeccaa53ad1450d52e7797ee8cf99d786ade47b05716288a90b62ca3c",
"md5": "e7bfa80b786a24f44c04ca6db385ecd2",
"sha256": "570384d9255cee432dd5ffff7509fe0810e6f7e70146e3501f0f62320780b4b0"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "e7bfa80b786a24f44c04ca6db385ecd2",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.4",
"size": 176704,
"upload_time": "2025-01-15T23:38:09",
"upload_time_iso_8601": "2025-01-15T23:38:09.055509Z",
"url": "https://files.pythonhosted.org/packages/3d/1b/7cabeccaa53ad1450d52e7797ee8cf99d786ade47b05716288a90b62ca3c/openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b2822b6cdf47a4c4d7ad2d763d853014af5a113bf18d0ceecb689d9f752ce6f7",
"md5": "f74449ef110af462b4094ce4e07fa1fd",
"sha256": "5f74b194865d24c51ee8fdc3c1e50c2b3a9421dcf569c48e6d42792e1f3e5a4f"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f74449ef110af462b4094ce4e07fa1fd",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.4",
"size": 167171,
"upload_time": "2025-01-15T23:38:10",
"upload_time_iso_8601": "2025-01-15T23:38:10.447707Z",
"url": "https://files.pythonhosted.org/packages/b2/82/2b6cdf47a4c4d7ad2d763d853014af5a113bf18d0ceecb689d9f752ce6f7/openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "153f425764b5913c1ce4988ef904ebacfecd428c0cd3f0b864af4aee055530ca",
"md5": "540834e7e5565c4cff579c7f9a6538b8",
"sha256": "67e1d5c1e48c84a2febc6ab7e6ea2ea5d6c64cac93c8e90e7b6269501c0e706d"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp310-pypy310_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "540834e7e5565c4cff579c7f9a6538b8",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.4",
"size": 135447,
"upload_time": "2025-01-15T23:38:11",
"upload_time_iso_8601": "2025-01-15T23:38:11.838115Z",
"url": "https://files.pythonhosted.org/packages/15/3f/425764b5913c1ce4988ef904ebacfecd428c0cd3f0b864af4aee055530ca/openstl-1.3.0-pp310-pypy310_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6dd98e78321e59e0bb2d1deea919c0bb6ef448e58e98fd464682f506bb83bc51",
"md5": "800703d1775b8b2047ea8ef507e36e8e",
"sha256": "4eea16327c334b14036fd09126b0f0112dbdc3fe9b1d2698016d8310c49e476f"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "800703d1775b8b2047ea8ef507e36e8e",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.4",
"size": 125076,
"upload_time": "2025-01-15T23:38:13",
"upload_time_iso_8601": "2025-01-15T23:38:13.204559Z",
"url": "https://files.pythonhosted.org/packages/6d/d9/8e78321e59e0bb2d1deea919c0bb6ef448e58e98fd464682f506bb83bc51/openstl-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1eeeab21ce47a9b57dee59f6ef310da521f8f922251e009d6368e0d4d0534b60",
"md5": "85473df4536c94151ab760cdecdc261f",
"sha256": "2902846c323cbd8fc2170079124481c6f95dede52c15fe77f8ae5ce2d0a9113a"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "85473df4536c94151ab760cdecdc261f",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.4",
"size": 175792,
"upload_time": "2025-01-15T23:38:16",
"upload_time_iso_8601": "2025-01-15T23:38:16.115713Z",
"url": "https://files.pythonhosted.org/packages/1e/ee/ab21ce47a9b57dee59f6ef310da521f8f922251e009d6368e0d4d0534b60/openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7fc2c36b50aa4c1e456afaec77e849695fa6862785563cb6b89e886bb2ef3458",
"md5": "83d956860edc7dac5a1568b041144a31",
"sha256": "b13d95004b5750197aa9cd006d555d98c256f500687c170937f0dfc406cf00c5"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "83d956860edc7dac5a1568b041144a31",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.4",
"size": 166508,
"upload_time": "2025-01-15T23:38:17",
"upload_time_iso_8601": "2025-01-15T23:38:17.819962Z",
"url": "https://files.pythonhosted.org/packages/7f/c2/c36b50aa4c1e456afaec77e849695fa6862785563cb6b89e886bb2ef3458/openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5f9de0c92d8e0669c6d3881915208fd51cffcb81b628c422a87537e28b4eb49f",
"md5": "1dd3bb32420be2e8c0aa12be1f8650f8",
"sha256": "e1265d8cbbb6c4e8596efe5247cf954e28f42faa32b2fae1ea8450daf8cb0da7"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp37-pypy37_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "1dd3bb32420be2e8c0aa12be1f8650f8",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.4",
"size": 135292,
"upload_time": "2025-01-15T23:38:19",
"upload_time_iso_8601": "2025-01-15T23:38:19.319583Z",
"url": "https://files.pythonhosted.org/packages/5f/9d/e0c92d8e0669c6d3881915208fd51cffcb81b628c422a87537e28b4eb49f/openstl-1.3.0-pp37-pypy37_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "71e7a5e03054b6fb43b9c663403387c6e11d5962da5bdab574801d7002bff95a",
"md5": "4fe42e8f5aa120b4f0755f5c65786d9f",
"sha256": "3e347fd0e79fd7a6bd706b2dea18941f98832050fdb3155a7c2c5f4c7a663b86"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "4fe42e8f5aa120b4f0755f5c65786d9f",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.4",
"size": 125453,
"upload_time": "2025-01-15T23:38:20",
"upload_time_iso_8601": "2025-01-15T23:38:20.781299Z",
"url": "https://files.pythonhosted.org/packages/71/e7/a5e03054b6fb43b9c663403387c6e11d5962da5bdab574801d7002bff95a/openstl-1.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "066b9b7af77fa0fa397df9c760f22b66220b723bd02b5104bfaa9ad59960ef85",
"md5": "39eb8f5143c6b711eef3c776516a54cd",
"sha256": "e5f6609e4f83dc48d1b223fbc3737244ef7e073705bdd6fb96d4d5fb3894c901"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "39eb8f5143c6b711eef3c776516a54cd",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.4",
"size": 116211,
"upload_time": "2025-01-15T23:38:22",
"upload_time_iso_8601": "2025-01-15T23:38:22.224881Z",
"url": "https://files.pythonhosted.org/packages/06/6b/9b7af77fa0fa397df9c760f22b66220b723bd02b5104bfaa9ad59960ef85/openstl-1.3.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "03a33749746117092ba65f3a355935206701de471e52481f17daf1b687872d5c",
"md5": "dc4f73f63dbbd8d0ecdd150f9c4a5cd6",
"sha256": "66d68a3a7e471eb9b92eca98829f1118d0134fc5f4d7b7c907027ce00fb2de1b"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "dc4f73f63dbbd8d0ecdd150f9c4a5cd6",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.4",
"size": 176509,
"upload_time": "2025-01-15T23:38:27",
"upload_time_iso_8601": "2025-01-15T23:38:27.244137Z",
"url": "https://files.pythonhosted.org/packages/03/a3/3749746117092ba65f3a355935206701de471e52481f17daf1b687872d5c/openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7fb460f76c1f4b4fd5c0bb9053641f3735f9029aff337e9272f079a7d6becb08",
"md5": "9d159d10f75235ba7ef4a680e80641c7",
"sha256": "73c25700ad6e00563234d52726208fab0e5e2c9894737adb948964a6407bd9f9"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9d159d10f75235ba7ef4a680e80641c7",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.4",
"size": 166891,
"upload_time": "2025-01-15T23:38:28",
"upload_time_iso_8601": "2025-01-15T23:38:28.759345Z",
"url": "https://files.pythonhosted.org/packages/7f/b4/60f76c1f4b4fd5c0bb9053641f3735f9029aff337e9272f079a7d6becb08/openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "72b143679fa661daf259b4c415b15d3d5cc5cd37d7ab30f9dae13eb1394b4ff4",
"md5": "efc2805a256f4334913f583a6cdf8143",
"sha256": "9ad324b5616fea689c3385fe3e19bafb1004f69f4a6e688fdab6e72f7be72033"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp38-pypy38_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "efc2805a256f4334913f583a6cdf8143",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.4",
"size": 135474,
"upload_time": "2025-01-15T23:38:30",
"upload_time_iso_8601": "2025-01-15T23:38:30.494320Z",
"url": "https://files.pythonhosted.org/packages/72/b1/43679fa661daf259b4c415b15d3d5cc5cd37d7ab30f9dae13eb1394b4ff4/openstl-1.3.0-pp38-pypy38_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f7daf5119652f903b6ad5c6cabc8a2d35ad43c99001c74de7602048217e5234c",
"md5": "e4b47a93ed7387ba5141e31737b8e697",
"sha256": "344dfc8869efbcc665a51a84677231ef28eddf4f7018562230f32949ce61a72a"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
"has_sig": false,
"md5_digest": "e4b47a93ed7387ba5141e31737b8e697",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.4",
"size": 125580,
"upload_time": "2025-01-15T23:38:32",
"upload_time_iso_8601": "2025-01-15T23:38:32.576846Z",
"url": "https://files.pythonhosted.org/packages/f7/da/f5119652f903b6ad5c6cabc8a2d35ad43c99001c74de7602048217e5234c/openstl-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b488f3bdc64b77541193dbc952b456352e633962182dfb903d1dabc5dc430a48",
"md5": "620519c5856a56589a691fd7d4b03470",
"sha256": "841030b7027ba63c2ebc6bff27140707e7f34058321f46e5e9a207e6db9027b0"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "620519c5856a56589a691fd7d4b03470",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.4",
"size": 116260,
"upload_time": "2025-01-15T23:38:34",
"upload_time_iso_8601": "2025-01-15T23:38:34.004320Z",
"url": "https://files.pythonhosted.org/packages/b4/88/f3bdc64b77541193dbc952b456352e633962182dfb903d1dabc5dc430a48/openstl-1.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "305e6f70240bc2328f7ff0a066389d94f84e67b28dabdb4ec09156b72df05d1f",
"md5": "8155d90eef44af4a2b4a5b382c4ed9c1",
"sha256": "7e3c187d799369ed186208736103fdd11af69151aa7cda03a9857fb4a047b851"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "8155d90eef44af4a2b4a5b382c4ed9c1",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.4",
"size": 176697,
"upload_time": "2025-01-15T23:38:35",
"upload_time_iso_8601": "2025-01-15T23:38:35.503596Z",
"url": "https://files.pythonhosted.org/packages/30/5e/6f70240bc2328f7ff0a066389d94f84e67b28dabdb4ec09156b72df05d1f/openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a571430cf6afec6e53582aa2b063b33b00b5b4e14cb2e0bfe36e586e1806002f",
"md5": "c1b30bf2e066c9dee82f2aa38aad8c05",
"sha256": "fb9f0b4d68a4b888c6cb4098a281ca46d47a91e88c464dc14998e506a6cb1533"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c1b30bf2e066c9dee82f2aa38aad8c05",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.4",
"size": 167147,
"upload_time": "2025-01-15T23:38:36",
"upload_time_iso_8601": "2025-01-15T23:38:36.955252Z",
"url": "https://files.pythonhosted.org/packages/a5/71/430cf6afec6e53582aa2b063b33b00b5b4e14cb2e0bfe36e586e1806002f/openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a93a4c9804e3eb8b8d645500ac2555e6dd76b1123091806a71c211b85bc7f721",
"md5": "bb595a842603189ca7bd7e98d894c5c6",
"sha256": "533b8c56b55680f64a36e7e77b2a28b8f32f1131b581c285283aca801ebb1fee"
},
"downloads": -1,
"filename": "openstl-1.3.0-pp39-pypy39_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "bb595a842603189ca7bd7e98d894c5c6",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.4",
"size": 135549,
"upload_time": "2025-01-15T23:38:38",
"upload_time_iso_8601": "2025-01-15T23:38:38.333161Z",
"url": "https://files.pythonhosted.org/packages/a9/3a/4c9804e3eb8b8d645500ac2555e6dd76b1123091806a71c211b85bc7f721/openstl-1.3.0-pp39-pypy39_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-15 23:35:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Innoptech",
"github_project": "OpenSTL",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "openstl"
}