zengl


Namezengl JSON
Version 2.4.1 PyPI version JSON
download
home_pagehttps://github.com/szabolcsdombi/zengl/
SummarySelf-Contained OpenGL Rendering Pipelines for Python
upload_time2024-02-10 18:55:53
maintainer
docs_urlNone
authorSzabolcs Dombi
requires_python
licenseMIT
keywords opengl rendering graphics visualization 3d shader geometry accelerated gpu webgl
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ZenGL

[![ZenGL](https://repository-images.githubusercontent.com/420309094/f7c17e13-4d5b-4a38-8b52-ab2dfdacd5a0)](#zengl)

```
pip install zengl
```

- [Documentation](https://zengl.readthedocs.io/)
- [zengl on Github](https://github.com/szabolcsdombi/zengl/)
- [zengl on PyPI](https://pypi.org/project/zengl/)

## Concept

ZenGL is a low level graphics library.

- ZenGL turns OpenGL into Vulkan like [Rendering Pipelines](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineCreateInfo.html)
- ZenGL uses **OpenGL 3.3 Core** and **OpenGL 3.0 ES** - runs everywhere
- ZenGL provides a developer friendly experience in protyping complex scenes

ZenGL emerged from an experimental version of [ModernGL](https://github.com/moderngl/moderngl).
To keep ModernGL backward compatible, ZenGL was re-designed from the ground-up to support a strict subset of OpenGL.
On the other hand, ModernGL supports a wide variety of OpenGL versions and extensions.

ZenGL is "ModernGL hard mode"

ZenGL intentionally does not support:

- Transform Feedback
- Geometry Shaders
- Tesselation
- Compute Shaders
- 3D Textures
- Storage Buffers

Most of the above can be implemented in a more hardware friendly way using the existing ZenGL API.
Interoperability with other modules is also possible. Using such may reduce the application's portablity.
It is even possible to use direct OpenGL calls together with ZenGL, however this is likely not necessary.

It is common to render directly to the screen with OpenGL.
With ZenGL, the right way is to render to a framebuffer and blit the final image to the screen.
This allows fine-grained control of the framebuffer format, guaranteed multisampling settings, correct depth/stencil precison.
It is also possible to render directly to the screen, however this feature is designed to be used for the postprocessing step.

This design allows ZenGL to support:

- Rendering without a window
- Rendering to multiple windows
- Rendering to HDR monitors
- Refreshing the screen without re-rendering the scene
- Apply post-processing without changing how the scene is rendered
- Making reusable shaders and components
- Taking screenshots or exporting a video

The [default framebuffer](https://www.khronos.org/opengl/wiki/Default_Framebuffer) in OpenGL is highly dependent on how the Window is created.
It is often necessary to configure the Window to provide the proper depth precision, stencil buffer, multisampling and double buffering.
Often the "best pixel format" lacks all of these features on purpose. ZenGL aims to allow choosing these pixel formats and ensures the user specifies the rendering requirements.
It is even possible to render low-resolution images and upscale them for high-resolution monitors.
Tearing can be easily prevented by decoupling the scene rendering from the screen updates.

ZenGL was designed for Prototyping

It is tempting to start a project with Vulkan, however even getting a simple scene rendered requires tremendous work and advanced tooling to compile shaders ahead of time. ZenGL provides self-contained Pipelines which can be easily ported to Vulkan.
ZenGL code is verbose and easy to read.

ZenGL support multiple design patters

Many libraries enfore certain design patterns.
ZenGL avoids this by providing cached pipeline creation, pipeline templating and lean resourece and framebuffer definition.
It is supported to create pipelines on the fly or template them for certain use-cases.

> TODO: examples for such patters

## Disambiguation

- ZenGL is a drop-in replacement for pure OpenGL code
- Using ZenGL requires some OpenGL knowledge
- ZenGL Images are OpenGL [Texture Objects](https://www.khronos.org/opengl/wiki/Texture) or OpenGL [Renderbuffer Objects](https://www.khronos.org/opengl/wiki/Renderbuffer_Object)
- ZenGL Buffers are OpenGL [Buffer Objects](https://www.khronos.org/opengl/wiki/Buffer_Object)
- ZenGL Pipelines contain an OpenGL [Vertex Array Object](https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Array_Object), an OpenGL [Program Object](https://www.khronos.org/opengl/wiki/GLSL_Object#Program_objects), and an OpenGL [Framebuffer Object](https://www.khronos.org/opengl/wiki/Framebuffer)
- ZenGL Pielines may also contain OpenGL [Sampler Objects](https://www.khronos.org/opengl/wiki/Sampler_Object)
- Creating ZenGL Pipelines does not necessarily compile the shader from source
- The ZenGL Shader Cache exists independently from the Pipeline objects
- A Framebuffer is always represented by a Python list of ZenGL Images
- There is no `Pipeline.clear()` method, individual images must be cleared independently
- GLSL Uniform Blocks and sampler2D objects are bound in the Pipeline layout
- Textures and Uniform Buffers are bound in the Pipeline resources

## [Examples](./examples/)

[![bezier_curves](https://user-images.githubusercontent.com/11232402/235417415-f04815bf-3380-45fa-9804-f9f36016f46c.png)](#native-examples)
[![deferred_rendering](https://user-images.githubusercontent.com/11232402/235417431-4dd870ea-1804-4b00-bfd2-49e3ca72e2b1.png)](#native-examples)
[![envmap](https://user-images.githubusercontent.com/11232402/235417438-0cc02333-dd92-47e4-b874-ff1b6dca2086.png)](#native-examples)
[![fractal](https://user-images.githubusercontent.com/11232402/235417445-73efbe67-21ea-4aae-a1ff-6aa4002bf58d.png)](#native-examples)
[![grass](https://user-images.githubusercontent.com/11232402/235417450-3ff0b82d-e097-40cd-947a-58803e464cd3.png)](#native-examples)
[![normal_mapping](https://user-images.githubusercontent.com/11232402/235417454-1d8e4bfb-02ad-42a2-87ba-ce39f47de14d.png)](#native-examples)
[![rigged_objects](https://user-images.githubusercontent.com/11232402/235417459-79483b7f-6581-4788-a662-ef81087334b6.png)](#native-examples)
[![wireframe](https://user-images.githubusercontent.com/11232402/235417465-f3f54a9b-624b-4fa1-88b6-f725ac468e78.png)](#native-examples)

### Simple Pipeline Definition

```py
pipeline = ctx.pipeline(
    # program definition
    vertex_shader='...',
    fragment_shader='...',
    layout=[
        {
            'name': 'Uniforms',
            'binding': 0,
        },
        {
            'name': 'Texture',
            'binding': 0,
        },
    ],

    # descriptor sets
    resources=[
        {
            'type': 'uniform_buffer',
            'binding': 0,
            'buffer': uniform_buffer,
        },
        {
            'type': 'sampler',
            'binding': 0,
            'image': texture,
        },
    ],

    # uniforms
    uniforms={
        'color': [0.0, 0.5, 1.0],
        'iterations': 10,
    },

    # program definition global state
    depth={
        'func': 'less',
        'write': False,
    },
    stencil={
        'front': {
            'fail_op': 'replace',
            'pass_op': 'replace',
            'depth_fail_op': 'replace',
            'compare_op': 'always',
            'compare_mask': 1,
            'write_mask': 1,
            'reference': 1,
        },
        'back': ...,
        # or
        'both': ...,
    },
    blend={
        'enable': True,
        'src_color': 'src_alpha',
        'dst_color': 'one_minus_src_alpha',
    },
    cull_face='back',
    topology='triangles',

    # framebuffer
    framebuffer=[color1, color2, ..., depth],
    viewport=(x, y, width, height),

    # vertex array
    vertex_buffers=[
        *zengl.bind(vertex_buffer, '3f 3f', 0, 1), # bound vertex attributes
        *zengl.bind(None, '2f', 2), # unused vertex attribute
    ],
    index_buffer=index_buffer, # or None
    short_index=False, # 2 or 4 byte intex
    vertex_count=...,
    instance_count=1,
    first_vertex=0,

    # override includes
    includes={
        'common': '...',
    },
)

# some members are actually mutable and calls no OpenGL functions
pipeline.viewport = ...
pipeline.vertex_count = ...
pipeline.uniforms['iterations'][:] = struct.pack('i', 50) # writable memoryview

# rendering
pipeline.render() # no parameters for hot code
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/szabolcsdombi/zengl/",
    "name": "zengl",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "OpenGL,rendering,graphics,visualization,3D,shader,geometry,accelerated,gpu,webgl",
    "author": "Szabolcs Dombi",
    "author_email": "szabolcs@szabolcsdombi.com",
    "download_url": "https://files.pythonhosted.org/packages/6e/0c/9945be9221e665a098f3207a52c1d42a2a6070c1aba25d8761fa25d00dea/zengl-2.4.1.tar.gz",
    "platform": "any",
    "description": "# ZenGL\n\n[![ZenGL](https://repository-images.githubusercontent.com/420309094/f7c17e13-4d5b-4a38-8b52-ab2dfdacd5a0)](#zengl)\n\n```\npip install zengl\n```\n\n- [Documentation](https://zengl.readthedocs.io/)\n- [zengl on Github](https://github.com/szabolcsdombi/zengl/)\n- [zengl on PyPI](https://pypi.org/project/zengl/)\n\n## Concept\n\nZenGL is a low level graphics library.\n\n- ZenGL turns OpenGL into Vulkan like [Rendering Pipelines](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineCreateInfo.html)\n- ZenGL uses **OpenGL 3.3 Core** and **OpenGL 3.0 ES** - runs everywhere\n- ZenGL provides a developer friendly experience in protyping complex scenes\n\nZenGL emerged from an experimental version of [ModernGL](https://github.com/moderngl/moderngl).\nTo keep ModernGL backward compatible, ZenGL was re-designed from the ground-up to support a strict subset of OpenGL.\nOn the other hand, ModernGL supports a wide variety of OpenGL versions and extensions.\n\nZenGL is \"ModernGL hard mode\"\n\nZenGL intentionally does not support:\n\n- Transform Feedback\n- Geometry Shaders\n- Tesselation\n- Compute Shaders\n- 3D Textures\n- Storage Buffers\n\nMost of the above can be implemented in a more hardware friendly way using the existing ZenGL API.\nInteroperability with other modules is also possible. Using such may reduce the application's portablity.\nIt is even possible to use direct OpenGL calls together with ZenGL, however this is likely not necessary.\n\nIt is common to render directly to the screen with OpenGL.\nWith ZenGL, the right way is to render to a framebuffer and blit the final image to the screen.\nThis allows fine-grained control of the framebuffer format, guaranteed multisampling settings, correct depth/stencil precison.\nIt is also possible to render directly to the screen, however this feature is designed to be used for the postprocessing step.\n\nThis design allows ZenGL to support:\n\n- Rendering without a window\n- Rendering to multiple windows\n- Rendering to HDR monitors\n- Refreshing the screen without re-rendering the scene\n- Apply post-processing without changing how the scene is rendered\n- Making reusable shaders and components\n- Taking screenshots or exporting a video\n\nThe [default framebuffer](https://www.khronos.org/opengl/wiki/Default_Framebuffer) in OpenGL is highly dependent on how the Window is created.\nIt is often necessary to configure the Window to provide the proper depth precision, stencil buffer, multisampling and double buffering.\nOften the \"best pixel format\" lacks all of these features on purpose. ZenGL aims to allow choosing these pixel formats and ensures the user specifies the rendering requirements.\nIt is even possible to render low-resolution images and upscale them for high-resolution monitors.\nTearing can be easily prevented by decoupling the scene rendering from the screen updates.\n\nZenGL was designed for Prototyping\n\nIt is tempting to start a project with Vulkan, however even getting a simple scene rendered requires tremendous work and advanced tooling to compile shaders ahead of time. ZenGL provides self-contained Pipelines which can be easily ported to Vulkan.\nZenGL code is verbose and easy to read.\n\nZenGL support multiple design patters\n\nMany libraries enfore certain design patterns.\nZenGL avoids this by providing cached pipeline creation, pipeline templating and lean resourece and framebuffer definition.\nIt is supported to create pipelines on the fly or template them for certain use-cases.\n\n> TODO: examples for such patters\n\n## Disambiguation\n\n- ZenGL is a drop-in replacement for pure OpenGL code\n- Using ZenGL requires some OpenGL knowledge\n- ZenGL Images are OpenGL [Texture Objects](https://www.khronos.org/opengl/wiki/Texture) or OpenGL [Renderbuffer Objects](https://www.khronos.org/opengl/wiki/Renderbuffer_Object)\n- ZenGL Buffers are OpenGL [Buffer Objects](https://www.khronos.org/opengl/wiki/Buffer_Object)\n- ZenGL Pipelines contain an OpenGL [Vertex Array Object](https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Array_Object), an OpenGL [Program Object](https://www.khronos.org/opengl/wiki/GLSL_Object#Program_objects), and an OpenGL [Framebuffer Object](https://www.khronos.org/opengl/wiki/Framebuffer)\n- ZenGL Pielines may also contain OpenGL [Sampler Objects](https://www.khronos.org/opengl/wiki/Sampler_Object)\n- Creating ZenGL Pipelines does not necessarily compile the shader from source\n- The ZenGL Shader Cache exists independently from the Pipeline objects\n- A Framebuffer is always represented by a Python list of ZenGL Images\n- There is no `Pipeline.clear()` method, individual images must be cleared independently\n- GLSL Uniform Blocks and sampler2D objects are bound in the Pipeline layout\n- Textures and Uniform Buffers are bound in the Pipeline resources\n\n## [Examples](./examples/)\n\n[![bezier_curves](https://user-images.githubusercontent.com/11232402/235417415-f04815bf-3380-45fa-9804-f9f36016f46c.png)](#native-examples)\n[![deferred_rendering](https://user-images.githubusercontent.com/11232402/235417431-4dd870ea-1804-4b00-bfd2-49e3ca72e2b1.png)](#native-examples)\n[![envmap](https://user-images.githubusercontent.com/11232402/235417438-0cc02333-dd92-47e4-b874-ff1b6dca2086.png)](#native-examples)\n[![fractal](https://user-images.githubusercontent.com/11232402/235417445-73efbe67-21ea-4aae-a1ff-6aa4002bf58d.png)](#native-examples)\n[![grass](https://user-images.githubusercontent.com/11232402/235417450-3ff0b82d-e097-40cd-947a-58803e464cd3.png)](#native-examples)\n[![normal_mapping](https://user-images.githubusercontent.com/11232402/235417454-1d8e4bfb-02ad-42a2-87ba-ce39f47de14d.png)](#native-examples)\n[![rigged_objects](https://user-images.githubusercontent.com/11232402/235417459-79483b7f-6581-4788-a662-ef81087334b6.png)](#native-examples)\n[![wireframe](https://user-images.githubusercontent.com/11232402/235417465-f3f54a9b-624b-4fa1-88b6-f725ac468e78.png)](#native-examples)\n\n### Simple Pipeline Definition\n\n```py\npipeline = ctx.pipeline(\n    # program definition\n    vertex_shader='...',\n    fragment_shader='...',\n    layout=[\n        {\n            'name': 'Uniforms',\n            'binding': 0,\n        },\n        {\n            'name': 'Texture',\n            'binding': 0,\n        },\n    ],\n\n    # descriptor sets\n    resources=[\n        {\n            'type': 'uniform_buffer',\n            'binding': 0,\n            'buffer': uniform_buffer,\n        },\n        {\n            'type': 'sampler',\n            'binding': 0,\n            'image': texture,\n        },\n    ],\n\n    # uniforms\n    uniforms={\n        'color': [0.0, 0.5, 1.0],\n        'iterations': 10,\n    },\n\n    # program definition global state\n    depth={\n        'func': 'less',\n        'write': False,\n    },\n    stencil={\n        'front': {\n            'fail_op': 'replace',\n            'pass_op': 'replace',\n            'depth_fail_op': 'replace',\n            'compare_op': 'always',\n            'compare_mask': 1,\n            'write_mask': 1,\n            'reference': 1,\n        },\n        'back': ...,\n        # or\n        'both': ...,\n    },\n    blend={\n        'enable': True,\n        'src_color': 'src_alpha',\n        'dst_color': 'one_minus_src_alpha',\n    },\n    cull_face='back',\n    topology='triangles',\n\n    # framebuffer\n    framebuffer=[color1, color2, ..., depth],\n    viewport=(x, y, width, height),\n\n    # vertex array\n    vertex_buffers=[\n        *zengl.bind(vertex_buffer, '3f 3f', 0, 1), # bound vertex attributes\n        *zengl.bind(None, '2f', 2), # unused vertex attribute\n    ],\n    index_buffer=index_buffer, # or None\n    short_index=False, # 2 or 4 byte intex\n    vertex_count=...,\n    instance_count=1,\n    first_vertex=0,\n\n    # override includes\n    includes={\n        'common': '...',\n    },\n)\n\n# some members are actually mutable and calls no OpenGL functions\npipeline.viewport = ...\npipeline.vertex_count = ...\npipeline.uniforms['iterations'][:] = struct.pack('i', 50) # writable memoryview\n\n# rendering\npipeline.render() # no parameters for hot code\n```\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Self-Contained OpenGL Rendering Pipelines for Python",
    "version": "2.4.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/szabolcsdombi/zengl/issues/",
        "Documentation": "https://zengl.readthedocs.io/",
        "Homepage": "https://github.com/szabolcsdombi/zengl/",
        "Source": "https://github.com/szabolcsdombi/zengl/"
    },
    "split_keywords": [
        "opengl",
        "rendering",
        "graphics",
        "visualization",
        "3d",
        "shader",
        "geometry",
        "accelerated",
        "gpu",
        "webgl"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "078e861851f2b48e6610a62b46990d129546a012228f13bcdb9ab49d569ec289",
                "md5": "02eb632c524eda4baad70935e91e12b9",
                "sha256": "dbeb15fa56800385c4c2f9419d88257851edafd0b89832103eb977dde48283ba"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "02eb632c524eda4baad70935e91e12b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 47036,
            "upload_time": "2024-02-10T18:55:59",
            "upload_time_iso_8601": "2024-02-10T18:55:59.670618Z",
            "url": "https://files.pythonhosted.org/packages/07/8e/861851f2b48e6610a62b46990d129546a012228f13bcdb9ab49d569ec289/zengl-2.4.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "674c5bcd005dc55c1e4d1e2c79b95b1affc12724703adcce547b6bf901a68a77",
                "md5": "fc54f2bb058107a6e11129015929d8e4",
                "sha256": "ea444e0dd5e4aa08aaf4c0a8173fcc2769533e02a9da3e97ef5b8a45f80e1e96"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "fc54f2bb058107a6e11129015929d8e4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 44398,
            "upload_time": "2024-02-10T18:56:00",
            "upload_time_iso_8601": "2024-02-10T18:56:00.949999Z",
            "url": "https://files.pythonhosted.org/packages/67/4c/5bcd005dc55c1e4d1e2c79b95b1affc12724703adcce547b6bf901a68a77/zengl-2.4.1-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "39ab09990f57a93425eb7a5a3e145ed8df2331b91d6c407f8ba7144d6f079cf5",
                "md5": "f1fa30674f7f4d2e655e9fd61ccb47b2",
                "sha256": "62e4972e62f05f1a27ac0d12d81dfbc651be5ee57e9cbda5180aff351b320b5f"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "f1fa30674f7f4d2e655e9fd61ccb47b2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 122207,
            "upload_time": "2024-02-10T18:56:02",
            "upload_time_iso_8601": "2024-02-10T18:56:02.985288Z",
            "url": "https://files.pythonhosted.org/packages/39/ab/09990f57a93425eb7a5a3e145ed8df2331b91d6c407f8ba7144d6f079cf5/zengl-2.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea9229a0be5d5a4bfe48b1e7d063a62d2a51b3c670df111b8d826f763974678b",
                "md5": "1f4e07d5065ab7fe0f3ae9149f632744",
                "sha256": "3b81c4ffcb2c01d65377cd9bf7e6ffa67104aacf34a98c1ecccc0daa306ff516"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1f4e07d5065ab7fe0f3ae9149f632744",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 131744,
            "upload_time": "2024-02-10T18:56:04",
            "upload_time_iso_8601": "2024-02-10T18:56:04.319717Z",
            "url": "https://files.pythonhosted.org/packages/ea/92/29a0be5d5a4bfe48b1e7d063a62d2a51b3c670df111b8d826f763974678b/zengl-2.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "946b4ddbb5112bf28608915f308dfe585499696ab73b3e28e17a11cd247c2f21",
                "md5": "36bb31128f872df672fa066f261797da",
                "sha256": "d4c24cd507908148322858e15d024020c72eece949e1d461eef0e18008649431"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "36bb31128f872df672fa066f261797da",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 125782,
            "upload_time": "2024-02-10T18:56:06",
            "upload_time_iso_8601": "2024-02-10T18:56:06.157241Z",
            "url": "https://files.pythonhosted.org/packages/94/6b/4ddbb5112bf28608915f308dfe585499696ab73b3e28e17a11cd247c2f21/zengl-2.4.1-cp310-cp310-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "19362cf6a419d7cd623e5ffa36edbc289bffe8713da141ba95a0c6d0b42e4501",
                "md5": "3e990aef812cd935ac157b8badc696ed",
                "sha256": "dacf4c57c8664c8820b90046c4030f1ede5caf35d11c9e02fb35d903c956bcba"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3e990aef812cd935ac157b8badc696ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 135330,
            "upload_time": "2024-02-10T18:56:07",
            "upload_time_iso_8601": "2024-02-10T18:56:07.988965Z",
            "url": "https://files.pythonhosted.org/packages/19/36/2cf6a419d7cd623e5ffa36edbc289bffe8713da141ba95a0c6d0b42e4501/zengl-2.4.1-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "09b8e32865fe7e306e19e8bac1a4857471a7a07b260f34e7305fed329e782b45",
                "md5": "4a44b68479a6ad1bab2f7d195b3eeffd",
                "sha256": "d04cef912887c9a0c61ebc167fd89393dc1ea97af4b5ab8373b63e466d7e33ff"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "4a44b68479a6ad1bab2f7d195b3eeffd",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 40268,
            "upload_time": "2024-02-10T18:56:09",
            "upload_time_iso_8601": "2024-02-10T18:56:09.936999Z",
            "url": "https://files.pythonhosted.org/packages/09/b8/e32865fe7e306e19e8bac1a4857471a7a07b260f34e7305fed329e782b45/zengl-2.4.1-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dad72c22d61bc8a9e52806ee7863693cafa6c382de5b629ce9140107ec33f207",
                "md5": "faf6ae8ff3bda7af370159ad8942b554",
                "sha256": "4bd9798026f209a45cf9f89cb2829f66c617fccbf872c03bc0912288038c5b5d"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "faf6ae8ff3bda7af370159ad8942b554",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 47121,
            "upload_time": "2024-02-10T18:56:11",
            "upload_time_iso_8601": "2024-02-10T18:56:11.151460Z",
            "url": "https://files.pythonhosted.org/packages/da/d7/2c22d61bc8a9e52806ee7863693cafa6c382de5b629ce9140107ec33f207/zengl-2.4.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "882c19796d156bf4a7d607c0cda62bbb8c796e18bb289e882300c8645b4ba4ed",
                "md5": "ab08dc1f759478b35d6af69af0bb029e",
                "sha256": "79b2ff3b47b3acd3c52ea4351017934014a9e2a0cb2488edde565130b0cd47b7"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ab08dc1f759478b35d6af69af0bb029e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 47145,
            "upload_time": "2024-02-10T18:56:12",
            "upload_time_iso_8601": "2024-02-10T18:56:12.915491Z",
            "url": "https://files.pythonhosted.org/packages/88/2c/19796d156bf4a7d607c0cda62bbb8c796e18bb289e882300c8645b4ba4ed/zengl-2.4.1-cp311-abi3-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72c8a3b2703a43dfc8b6ddf144a1707c9580abf78b24bbbd30bf78fe391a07b0",
                "md5": "159526849d5b4993b9daed772be9b51c",
                "sha256": "0e0209e4e23bc63c8dd6f8e21b9ad51fc74da725f6fbcd2b57edb83992233ddd"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "159526849d5b4993b9daed772be9b51c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 44608,
            "upload_time": "2024-02-10T18:56:14",
            "upload_time_iso_8601": "2024-02-10T18:56:14.475872Z",
            "url": "https://files.pythonhosted.org/packages/72/c8/a3b2703a43dfc8b6ddf144a1707c9580abf78b24bbbd30bf78fe391a07b0/zengl-2.4.1-cp311-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8fbac299f9a778fd71351d75ee915254c4b936f39614678342da88126299504d",
                "md5": "346fdc794698ea2837db851652321bcf",
                "sha256": "9906baf4cfe73f61867a8ec575a8502f504b4c36ec19f3fc09b842bce94246f2"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "346fdc794698ea2837db851652321bcf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 123063,
            "upload_time": "2024-02-10T18:56:16",
            "upload_time_iso_8601": "2024-02-10T18:56:16.397619Z",
            "url": "https://files.pythonhosted.org/packages/8f/ba/c299f9a778fd71351d75ee915254c4b936f39614678342da88126299504d/zengl-2.4.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "63bcd55d6162ab4c678e327f34bb807481ae9c5c7e775dca996e2dc7f8f8a6bd",
                "md5": "8a434024eb497cdceba925632bbd623d",
                "sha256": "222026ea31a72e2d13d9877ef0a0e75ec9877928f97ca96f72f458efb4ef337f"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8a434024eb497cdceba925632bbd623d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 133689,
            "upload_time": "2024-02-10T18:56:17",
            "upload_time_iso_8601": "2024-02-10T18:56:17.595729Z",
            "url": "https://files.pythonhosted.org/packages/63/bc/d55d6162ab4c678e327f34bb807481ae9c5c7e775dca996e2dc7f8f8a6bd/zengl-2.4.1-cp311-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "40d880faa23ccb4ac68e4ac8e9288af856f6a7fe89b7ffb0d3a4e0a3ea54aac4",
                "md5": "587f6d9666d8d44da6a057e59fc73998",
                "sha256": "f2fed635ae10a44b82f6eff5bcd00a79a82b7206187f7473f6c7b9f255391f74"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "587f6d9666d8d44da6a057e59fc73998",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 123835,
            "upload_time": "2024-02-10T18:56:19",
            "upload_time_iso_8601": "2024-02-10T18:56:19.493578Z",
            "url": "https://files.pythonhosted.org/packages/40/d8/80faa23ccb4ac68e4ac8e9288af856f6a7fe89b7ffb0d3a4e0a3ea54aac4/zengl-2.4.1-cp311-abi3-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "252f7db2b56790b0e197b78b23f39c0cfbce52be19aa83548a3c2175b9fab049",
                "md5": "13748124ec6dd14d387878ece43377c7",
                "sha256": "99cb92b2d86b298949a21e1b03bd77abe42f3658b66a35889ded2c2a0bf8aee5"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "13748124ec6dd14d387878ece43377c7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 134079,
            "upload_time": "2024-02-10T18:56:20",
            "upload_time_iso_8601": "2024-02-10T18:56:20.798022Z",
            "url": "https://files.pythonhosted.org/packages/25/2f/7db2b56790b0e197b78b23f39c0cfbce52be19aa83548a3c2175b9fab049/zengl-2.4.1-cp311-abi3-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0e410bf08c122c68adc9d4d0bc2c883e4ad3e699ed0d051ecdd164e10f7e89c7",
                "md5": "97c4c4b5766629a55646d7b5a2eb3d0a",
                "sha256": "3ccd186a02e5643ab28d4d44ba3d87da300c14e5c47fb48f1a9230ea964df44a"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "97c4c4b5766629a55646d7b5a2eb3d0a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 40448,
            "upload_time": "2024-02-10T18:56:22",
            "upload_time_iso_8601": "2024-02-10T18:56:22.148110Z",
            "url": "https://files.pythonhosted.org/packages/0e/41/0bf08c122c68adc9d4d0bc2c883e4ad3e699ed0d051ecdd164e10f7e89c7/zengl-2.4.1-cp311-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aa6a2cf1caac03fb357c0e72258a09affe3c113c1636bb4c2ce8ed73c8a8caf9",
                "md5": "7252ac934a29a6949c53f839affd7a96",
                "sha256": "93dc961d4ee946cdc6501bf2afe09d81d72d77034acb6d82a920d33ed577c4fe"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp311-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7252ac934a29a6949c53f839affd7a96",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 47391,
            "upload_time": "2024-02-10T18:56:23",
            "upload_time_iso_8601": "2024-02-10T18:56:23.267108Z",
            "url": "https://files.pythonhosted.org/packages/aa/6a/2cf1caac03fb357c0e72258a09affe3c113c1636bb4c2ce8ed73c8a8caf9/zengl-2.4.1-cp311-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "43dde0b526dc3ed16e163f959caa3715f5a6895513d343bdb77acf6314eaa5d0",
                "md5": "d3993c59ce40a2a09a8ae49e124d48bf",
                "sha256": "29a8510f0a9a1bcea2d528db0a68176abcea4809fe45577afe58b7deb7e6f722"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d3993c59ce40a2a09a8ae49e124d48bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 47036,
            "upload_time": "2024-02-10T18:56:25",
            "upload_time_iso_8601": "2024-02-10T18:56:25.071715Z",
            "url": "https://files.pythonhosted.org/packages/43/dd/e0b526dc3ed16e163f959caa3715f5a6895513d343bdb77acf6314eaa5d0/zengl-2.4.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "53f7df094194685e1a74460e3bf2bf99d8eca662d234acb14810dfe57e269c41",
                "md5": "f84fb537988cae0e5e9a4d109036570f",
                "sha256": "ca855fdea9acc3c7102fdd8da8688e4e45c38f9a5972cc7dc9cc3745d36bd140"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f84fb537988cae0e5e9a4d109036570f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 44392,
            "upload_time": "2024-02-10T18:56:26",
            "upload_time_iso_8601": "2024-02-10T18:56:26.314081Z",
            "url": "https://files.pythonhosted.org/packages/53/f7/df094194685e1a74460e3bf2bf99d8eca662d234acb14810dfe57e269c41/zengl-2.4.1-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "185497c85cbe7c80237057c431b10617d6c71da5f6d3abfc89142c6e90274690",
                "md5": "c4004054c4b6c2398c7470836dc37a46",
                "sha256": "9fd48f7a6faf38da079b166e3a91c59809493159983825c9829fd4c38e509a12"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "c4004054c4b6c2398c7470836dc37a46",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 125015,
            "upload_time": "2024-02-10T18:56:28",
            "upload_time_iso_8601": "2024-02-10T18:56:28.231649Z",
            "url": "https://files.pythonhosted.org/packages/18/54/97c85cbe7c80237057c431b10617d6c71da5f6d3abfc89142c6e90274690/zengl-2.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8a1617538150e47851f464ddd474dd06f0ab24c3bad347793b12535bae6253be",
                "md5": "d44cd9025ad58c692b73bfd3351dc25e",
                "sha256": "54eb644647b57adbf78ec006ddd1f3f7c6a737119b76f69859fc44655cf824ba"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d44cd9025ad58c692b73bfd3351dc25e",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 134496,
            "upload_time": "2024-02-10T18:56:30",
            "upload_time_iso_8601": "2024-02-10T18:56:30.128961Z",
            "url": "https://files.pythonhosted.org/packages/8a/16/17538150e47851f464ddd474dd06f0ab24c3bad347793b12535bae6253be/zengl-2.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "41fea4e479270308144e82e588631bd1fa754f75439fe99e574916289a02bbf5",
                "md5": "72ff97dc6fac1fb3085cf684227d2baa",
                "sha256": "c69d1e9d5f6a2faca2b22603d03600cb6b1cb6ac088a28cce2c7399e6b10e1b6"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "72ff97dc6fac1fb3085cf684227d2baa",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 129633,
            "upload_time": "2024-02-10T18:56:31",
            "upload_time_iso_8601": "2024-02-10T18:56:31.450673Z",
            "url": "https://files.pythonhosted.org/packages/41/fe/a4e479270308144e82e588631bd1fa754f75439fe99e574916289a02bbf5/zengl-2.4.1-cp38-cp38-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b4b08b7d9a1a27cabefac52bbf898e652b04033997d4b6e8ade3b25e8a2616b4",
                "md5": "e5cffa1f0b64ce049a6c57c969cc01f4",
                "sha256": "9b176bccd1a23ed67e6df712b505bc8aa14f1042939609dd2b8ac13c93250e1e"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e5cffa1f0b64ce049a6c57c969cc01f4",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 139603,
            "upload_time": "2024-02-10T18:56:32",
            "upload_time_iso_8601": "2024-02-10T18:56:32.816073Z",
            "url": "https://files.pythonhosted.org/packages/b4/b0/8b7d9a1a27cabefac52bbf898e652b04033997d4b6e8ade3b25e8a2616b4/zengl-2.4.1-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7bf620d94f0137ece6e2d6f880ff004bc5c34e50630f327d8eab1b9d3b697c0b",
                "md5": "07bea03fc9812f14b00bc50227b9acfd",
                "sha256": "2302807907de21b9c1298b2da7ddfd1a294f89dc44fc47a952a19e2ed7b8621b"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "07bea03fc9812f14b00bc50227b9acfd",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 40304,
            "upload_time": "2024-02-10T18:56:34",
            "upload_time_iso_8601": "2024-02-10T18:56:34.744843Z",
            "url": "https://files.pythonhosted.org/packages/7b/f6/20d94f0137ece6e2d6f880ff004bc5c34e50630f327d8eab1b9d3b697c0b/zengl-2.4.1-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ff3da86695d85c453745119e6026b44d252fba722a2ea48a998e3904e883c86c",
                "md5": "5d6d8db4ff9ed8c71500c176a99ec727",
                "sha256": "7cc09b0a55a4eb5b786328cfb180b7d9b19b2882dd0d57ceb74c8f4925077c33"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5d6d8db4ff9ed8c71500c176a99ec727",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 47156,
            "upload_time": "2024-02-10T18:56:36",
            "upload_time_iso_8601": "2024-02-10T18:56:36.594076Z",
            "url": "https://files.pythonhosted.org/packages/ff/3d/a86695d85c453745119e6026b44d252fba722a2ea48a998e3904e883c86c/zengl-2.4.1-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1e7e51300d6989e592f1e3fcb04d5091c5ba65513a5b190a658494a90c464e3c",
                "md5": "c597163961ef6977666c4ad551f320be",
                "sha256": "3ab2aad53507fec8b02a49a123f3e596e027c8fb6e79afb58c65c7f009f28b4a"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c597163961ef6977666c4ad551f320be",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 47037,
            "upload_time": "2024-02-10T18:56:38",
            "upload_time_iso_8601": "2024-02-10T18:56:38.319087Z",
            "url": "https://files.pythonhosted.org/packages/1e/7e/51300d6989e592f1e3fcb04d5091c5ba65513a5b190a658494a90c464e3c/zengl-2.4.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "89e3cd4930194c4566c84e2e3fa93ded1d4e77842d6c8c9f23994a19ea5a24ce",
                "md5": "e6befc0956b1c31e5108da4316d3db84",
                "sha256": "0a53af1c307c1ad490b009422e9b7eb2ec18a5960b1862db98e15e9ad6cad87a"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e6befc0956b1c31e5108da4316d3db84",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 44393,
            "upload_time": "2024-02-10T18:56:39",
            "upload_time_iso_8601": "2024-02-10T18:56:39.664289Z",
            "url": "https://files.pythonhosted.org/packages/89/e3/cd4930194c4566c84e2e3fa93ded1d4e77842d6c8c9f23994a19ea5a24ce/zengl-2.4.1-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4616a8624ba867a977838de501b41b2f7c91143e186e838c9f9d1436154d7105",
                "md5": "bc9dae4f335ac2fcf540fc2ec7efe9ee",
                "sha256": "1b851f7e2c4ab669e6fd18e447556d613099a44523cc6c1f7ee6960e70ff709c"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "bc9dae4f335ac2fcf540fc2ec7efe9ee",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 121791,
            "upload_time": "2024-02-10T18:56:41",
            "upload_time_iso_8601": "2024-02-10T18:56:41.520693Z",
            "url": "https://files.pythonhosted.org/packages/46/16/a8624ba867a977838de501b41b2f7c91143e186e838c9f9d1436154d7105/zengl-2.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2f23c1fef5b43a6777226eab45e9b5a79df9d212a62bf12a8ca77dcc221ece23",
                "md5": "e1e491496c57f75b74755fd6380e9895",
                "sha256": "902699753039e4722b68ea94d7fc61919e9ca3ddcdd478c19b6c3a5cfb9849fe"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e1e491496c57f75b74755fd6380e9895",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 131300,
            "upload_time": "2024-02-10T18:56:42",
            "upload_time_iso_8601": "2024-02-10T18:56:42.937805Z",
            "url": "https://files.pythonhosted.org/packages/2f/23/c1fef5b43a6777226eab45e9b5a79df9d212a62bf12a8ca77dcc221ece23/zengl-2.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5953c8b4b40eaa6360bcb337cdc11b60df9adcd24690a5ee39788865df0cd26d",
                "md5": "27155768377673c4198dc02577a3f806",
                "sha256": "822c419a261ab6ae8a7fdcf07f31b9ee12e56a3edd6a011b6d3e35e4aba82959"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "27155768377673c4198dc02577a3f806",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 125334,
            "upload_time": "2024-02-10T18:56:44",
            "upload_time_iso_8601": "2024-02-10T18:56:44.839503Z",
            "url": "https://files.pythonhosted.org/packages/59/53/c8b4b40eaa6360bcb337cdc11b60df9adcd24690a5ee39788865df0cd26d/zengl-2.4.1-cp39-cp39-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b1ee30c6b453fd5f59ff449ad99b213e03f4d1c2bd4ccae985a38c6515f0f986",
                "md5": "8d37ed67ec409b2d346a1a25ea49c7d0",
                "sha256": "c9cb53c18126f7458cd55ad045cbed956445db56610a29851722028e5d181ecc"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8d37ed67ec409b2d346a1a25ea49c7d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 134843,
            "upload_time": "2024-02-10T18:56:46",
            "upload_time_iso_8601": "2024-02-10T18:56:46.808560Z",
            "url": "https://files.pythonhosted.org/packages/b1/ee/30c6b453fd5f59ff449ad99b213e03f4d1c2bd4ccae985a38c6515f0f986/zengl-2.4.1-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e6b97838bfc5ae9a878717d1dbb977e1d211ab3ba12c4ede9ad5f9c3ad9db3c8",
                "md5": "880d2abf025af0e023b9448e3e326614",
                "sha256": "ff84ec51084e89f91c815240d5d1365be9f63be1108ec27b68099f9e9708ab39"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "880d2abf025af0e023b9448e3e326614",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 40299,
            "upload_time": "2024-02-10T18:56:48",
            "upload_time_iso_8601": "2024-02-10T18:56:48.203942Z",
            "url": "https://files.pythonhosted.org/packages/e6/b9/7838bfc5ae9a878717d1dbb977e1d211ab3ba12c4ede9ad5f9c3ad9db3c8/zengl-2.4.1-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c6a2b0abe4e3252e069f0502e2b229f2e8808f6d92336d00c29999055bc68f93",
                "md5": "67970f39d7381ef5476cc695d05a9884",
                "sha256": "aa59b16fc285fb70787d183a334d18f378a778c40d2c5f85a9dad451d5449388"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "67970f39d7381ef5476cc695d05a9884",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 47156,
            "upload_time": "2024-02-10T18:56:49",
            "upload_time_iso_8601": "2024-02-10T18:56:49.368189Z",
            "url": "https://files.pythonhosted.org/packages/c6/a2/b0abe4e3252e069f0502e2b229f2e8808f6d92336d00c29999055bc68f93/zengl-2.4.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e0c9945be9221e665a098f3207a52c1d42a2a6070c1aba25d8761fa25d00dea",
                "md5": "bbc47f823ad141af4b8235258c3d1d7d",
                "sha256": "30883b2acdc9a04fd2e09acb5a678b9ac73b54d1ad59e157dcff25ac6713e54b"
            },
            "downloads": -1,
            "filename": "zengl-2.4.1.tar.gz",
            "has_sig": false,
            "md5_digest": "bbc47f823ad141af4b8235258c3d1d7d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 54708,
            "upload_time": "2024-02-10T18:55:53",
            "upload_time_iso_8601": "2024-02-10T18:55:53.617264Z",
            "url": "https://files.pythonhosted.org/packages/6e/0c/9945be9221e665a098f3207a52c1d42a2a6070c1aba25d8761fa25d00dea/zengl-2.4.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-10 18:55:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "szabolcsdombi",
    "github_project": "zengl",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "zengl"
}
        
Elapsed time: 0.20103s