poga


Namepoga JSON
Version 0.1.19 PyPI version JSON
download
home_pagehttps://github.com/dzhsurf/poga
SummaryPython bindings for YogaLayout
upload_time2025-03-19 05:53:19
maintainerdzhsurf
docs_urlNone
authordzhsurf
requires_python>=3.7
licenseMIT
keywords yogalayout yoga poga
VCS
bugtrack_url
requirements pybind11
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Poga
====

 [![Docs](https://img.shields.io/badge/docs-latest-informational)](https://dzhsurf.github.io/poga/) 



Introduction
-----------------

Poga is a Python binding for YogaLayout.

It provides Python API for YogaLayout. And a high-level interface PogaLayout.

YogaLayout: https://yogalayout.com/



Install
-------

```shell
    # Python version requires >= 3.7
    pip install poga
```



Quickstart
----------

Use high-level interface PogaLayout

More details you can refer to the PGLayout of the pydui-gtk project below.

https://github.com/dzhsurf/pydui

```python
    from poga import PogaLayout

    def main():
        layout = PogaLayout()
        layout.flex_direction = YGFlexDirection.FlexStart
        # ...
        layout.apply_layout()
```

Use Binding CAPI directily

```python
    from poga.libpoga_capi import *

    def main():
        node = YGNodeNew()
        YGNodeSetNodeType(node, YGNodeType.Default)
        YGNodeFree(node)
```



Building
--------

Since there's a need for a cpp compiler to build the python extension module, you should install the build-essential tools before you build the package. 

* Windows: `VS16 - VS2019 Build Tools`

* MacOS: `XCode Command Line Tools`

* Linux (Ubuntu):  `build-essential`

```shell
# checkout the code and enter the diretory
pip install -r requirements.txt
pip install -e . 
# or you can just install the dependencies by poetry. 
poetry install
# now, all done. run the sample code 
python src/example/main.py
```



Benchmark
---------

```shell
# pip install line_profiler
kernprof -l benchmark/benchmark.py
python -m line_profiler -rmt "benchmark.py.lprof"
```

MacBook Pro (15-inch, 2016)

* Processor 2.7GHz Quad-core Intel Core i7
* Memory 16GB 2133 MHz LPDDR3



```
Timer unit: 1e-06 s

Total time: 0.000141 s
File: benchmark.py
Function: stack_with_flex at line 14

Line #      Hits         Time  Per Hit   % Time  Line Contents
    14                                           @profile
    15                                           def stack_with_flex():
    16         1         20.0     20.0     14.2      root = YGNodeNew()
    17         1         10.0     10.0      7.1      YGNodeStyleSetWidth(root, 100)
    18         1          3.0      3.0      2.1      YGNodeStyleSetHeight(root, 100)
    19        11         10.0      0.9      7.1      for i in range(10):
    20        10         23.0      2.3     16.3          child = YGNodeNew()
    21        10         12.0      1.2      8.5          YGNodeStyleSetFlex(child, i)
    22        10         16.0      1.6     11.3          YGNodeInsertChild(root, child, 0)
    23
    24         1         37.0     37.0     26.2      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)
    25         1         10.0     10.0      7.1      YGNodeFreeRecursive(root)

Total time: 0.000169 s
File: benchmark.py
Function: align_stretch_in_undefined_axis at line 28

Line #      Hits         Time  Per Hit   % Time  Line Contents
    28                                           @profile
    29                                           def align_stretch_in_undefined_axis():
    30         1          2.0      2.0      1.2      root = YGNodeNew()
    31        11          6.0      0.5      3.6      for i in range(10):
    32        10         14.0      1.4      8.3          child = YGNodeNew()
    33        10         10.0      1.0      5.9          YGNodeStyleSetHeight(child, 20)
    34        10         12.0      1.2      7.1          YGNodeSetMeasureFunc(child, measure_fn)
    35        10         12.0      1.2      7.1          YGNodeInsertChild(root, child, 0)
    36
    37         1        110.0    110.0     65.1      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)
    38         1          3.0      3.0      1.8      YGNodeFreeRecursive(root)

Total time: 0.001685 s
File: benchmark.py
Function: nested_flex at line 41

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    41                                           @profile
    42                                           def nested_flex():
    43         1          2.0      2.0      0.1      root = YGNodeNew()
    44        11          6.0      0.5      0.4      for i in range(10):
    45        10         17.0      1.7      1.0          child = YGNodeNew()
    46        10         11.0      1.1      0.7          YGNodeStyleSetFlex(child, 1)
    47        10         14.0      1.4      0.8          YGNodeInsertChild(root, child, 0)
    48
    49       110         53.0      0.5      3.1          for ii in range(10):
    50       100        197.0      2.0     11.7              grand_child = YGNodeNew()
    51       100        111.0      1.1      6.6              YGNodeSetMeasureFunc(grand_child, measure_fn)
    52       100        109.0      1.1      6.5              YGNodeStyleSetFlex(grand_child, 1)
    53       100        121.0      1.2      7.2              YGNodeInsertChild(child, grand_child, 0)
    54
    55         1       1029.0   1029.0     61.1      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)
    56         1         15.0     15.0      0.9      YGNodeFreeRecursive(root)

Total time: 0.093843 s
File: benchmark.py
Function: huge_nested_layout at line 59

Line #      Hits         Time  Per Hit   % Time  Line Contents
    59                                           @profile
    60                                           def huge_nested_layout():
    61         1          2.0      2.0      0.0      root = YGNodeNew()
    62        11          6.0      0.5      0.0      for i in range(10):
    63        10         15.0      1.5      0.0          child = YGNodeNew()
    64        10         11.0      1.1      0.0          YGNodeStyleSetFlexGrow(child, 1)
    65        10         11.0      1.1      0.0          YGNodeStyleSetWidth(child, 10)
    66        10         11.0      1.1      0.0          YGNodeStyleSetHeight(child, 10)
    67        10         13.0      1.3      0.0          YGNodeInsertChild(root, child, 0)
    68
    69       110         44.0      0.4      0.0          for ii in range(10):
    70       100        178.0      1.8      0.2              grand_child = YGNodeNew()
    71       100        115.0      1.1      0.1              YGNodeStyleSetFlexDirection(grand_child, YGFlexDirection.Row)
    72       100        101.0      1.0      0.1              YGNodeStyleSetFlexGrow(grand_child, 1)
    73       100         97.0      1.0      0.1              YGNodeStyleSetWidth(grand_child, 10)
    74       100         98.0      1.0      0.1              YGNodeStyleSetHeight(grand_child, 10)
    75       100        114.0      1.1      0.1              YGNodeInsertChild(child, grand_child, 0)
    76
    77      1100        561.0      0.5      0.6              for iii in range(10):
    78      1000       1782.0      1.8      1.9                  grand_grand_child = YGNodeNew()
    79      1000       1037.0      1.0      1.1                  YGNodeStyleSetFlexGrow(grand_grand_child, 1)
    80      1000        997.0      1.0      1.1                  YGNodeStyleSetWidth(grand_grand_child, 10)
    81      1000        959.0      1.0      1.0                  YGNodeStyleSetHeight(grand_grand_child, 10)
    82      1000       1177.0      1.2      1.3                  YGNodeInsertChild(grand_child, grand_grand_child, 0)
    83
    84     11000       5725.0      0.5      6.1                  for iiii in range(10):
    85     10000      17682.0      1.8     18.8                      grand_grand_grand_child = YGNodeNew()
    86     10000      11032.0      1.1     11.8                      YGNodeStyleSetFlexDirection(grand_grand_grand_child, YGFlexDirection.Row)
    87     10000      10126.0      1.0     10.8                      YGNodeStyleSetFlexGrow(grand_grand_grand_child, 1)
    88     10000      10035.0      1.0     10.7                      YGNodeStyleSetWidth(grand_grand_grand_child, 10)
    89     10000       9814.0      1.0     10.5                      YGNodeStyleSetHeight(grand_grand_grand_child, 10)
    90     10000      11796.0      1.2     12.6                      YGNodeInsertChild(grand_grand_child, grand_grand_grand_child, 0)
    91
    92         1       8696.0   8696.0      9.3      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)
    93         1       1608.0   1608.0      1.7      YGNodeFreeRecursive(root)
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/dzhsurf/poga",
    "name": "poga",
    "maintainer": "dzhsurf",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "dzhsurf@gmail.com",
    "keywords": "YogaLayout, Yoga, Poga",
    "author": "dzhsurf",
    "author_email": "dzhsurf@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/81/96/390e2cbb04c7c66567ad2a23677069c213904faf21e860da967c02e9d712/poga-0.1.19.tar.gz",
    "platform": null,
    "description": "Poga\n====\n\n [![Docs](https://img.shields.io/badge/docs-latest-informational)](https://dzhsurf.github.io/poga/) \n\n\n\nIntroduction\n-----------------\n\nPoga is a Python binding for YogaLayout.\n\nIt provides Python API for YogaLayout. And a high-level interface PogaLayout.\n\nYogaLayout: https://yogalayout.com/\n\n\n\nInstall\n-------\n\n```shell\n    # Python version requires >= 3.7\n    pip install poga\n```\n\n\n\nQuickstart\n----------\n\nUse high-level interface PogaLayout\n\nMore details you can refer to the PGLayout of the pydui-gtk project below.\n\nhttps://github.com/dzhsurf/pydui\n\n```python\n    from poga import PogaLayout\n\n    def main():\n        layout = PogaLayout()\n        layout.flex_direction = YGFlexDirection.FlexStart\n        # ...\n        layout.apply_layout()\n```\n\nUse Binding CAPI directily\n\n```python\n    from poga.libpoga_capi import *\n\n    def main():\n        node = YGNodeNew()\n        YGNodeSetNodeType(node, YGNodeType.Default)\n        YGNodeFree(node)\n```\n\n\n\nBuilding\n--------\n\nSince there's a need for a cpp compiler to build the python extension module, you should install the build-essential tools before you build the package. \n\n* Windows: `VS16 - VS2019 Build Tools`\n\n* MacOS: `XCode Command Line Tools`\n\n* Linux (Ubuntu):  `build-essential`\n\n```shell\n# checkout the code and enter the diretory\npip install -r requirements.txt\npip install -e . \n# or you can just install the dependencies by poetry. \npoetry install\n# now, all done. run the sample code \npython src/example/main.py\n```\n\n\n\nBenchmark\n---------\n\n```shell\n# pip install line_profiler\nkernprof -l benchmark/benchmark.py\npython -m line_profiler -rmt \"benchmark.py.lprof\"\n```\n\nMacBook Pro (15-inch, 2016)\n\n* Processor 2.7GHz Quad-core Intel Core i7\n* Memory 16GB 2133 MHz LPDDR3\n\n\n\n```\nTimer unit: 1e-06 s\n\nTotal time: 0.000141 s\nFile: benchmark.py\nFunction: stack_with_flex at line 14\n\nLine #      Hits         Time  Per Hit   % Time  Line Contents\n    14                                           @profile\n    15                                           def stack_with_flex():\n    16         1         20.0     20.0     14.2      root = YGNodeNew()\n    17         1         10.0     10.0      7.1      YGNodeStyleSetWidth(root, 100)\n    18         1          3.0      3.0      2.1      YGNodeStyleSetHeight(root, 100)\n    19        11         10.0      0.9      7.1      for i in range(10):\n    20        10         23.0      2.3     16.3          child = YGNodeNew()\n    21        10         12.0      1.2      8.5          YGNodeStyleSetFlex(child, i)\n    22        10         16.0      1.6     11.3          YGNodeInsertChild(root, child, 0)\n    23\n    24         1         37.0     37.0     26.2      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)\n    25         1         10.0     10.0      7.1      YGNodeFreeRecursive(root)\n\nTotal time: 0.000169 s\nFile: benchmark.py\nFunction: align_stretch_in_undefined_axis at line 28\n\nLine #      Hits         Time  Per Hit   % Time  Line Contents\n    28                                           @profile\n    29                                           def align_stretch_in_undefined_axis():\n    30         1          2.0      2.0      1.2      root = YGNodeNew()\n    31        11          6.0      0.5      3.6      for i in range(10):\n    32        10         14.0      1.4      8.3          child = YGNodeNew()\n    33        10         10.0      1.0      5.9          YGNodeStyleSetHeight(child, 20)\n    34        10         12.0      1.2      7.1          YGNodeSetMeasureFunc(child, measure_fn)\n    35        10         12.0      1.2      7.1          YGNodeInsertChild(root, child, 0)\n    36\n    37         1        110.0    110.0     65.1      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)\n    38         1          3.0      3.0      1.8      YGNodeFreeRecursive(root)\n\nTotal time: 0.001685 s\nFile: benchmark.py\nFunction: nested_flex at line 41\n\nLine #      Hits         Time  Per Hit   % Time  Line Contents\n==============================================================\n    41                                           @profile\n    42                                           def nested_flex():\n    43         1          2.0      2.0      0.1      root = YGNodeNew()\n    44        11          6.0      0.5      0.4      for i in range(10):\n    45        10         17.0      1.7      1.0          child = YGNodeNew()\n    46        10         11.0      1.1      0.7          YGNodeStyleSetFlex(child, 1)\n    47        10         14.0      1.4      0.8          YGNodeInsertChild(root, child, 0)\n    48\n    49       110         53.0      0.5      3.1          for ii in range(10):\n    50       100        197.0      2.0     11.7              grand_child = YGNodeNew()\n    51       100        111.0      1.1      6.6              YGNodeSetMeasureFunc(grand_child, measure_fn)\n    52       100        109.0      1.1      6.5              YGNodeStyleSetFlex(grand_child, 1)\n    53       100        121.0      1.2      7.2              YGNodeInsertChild(child, grand_child, 0)\n    54\n    55         1       1029.0   1029.0     61.1      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)\n    56         1         15.0     15.0      0.9      YGNodeFreeRecursive(root)\n\nTotal time: 0.093843 s\nFile: benchmark.py\nFunction: huge_nested_layout at line 59\n\nLine #      Hits         Time  Per Hit   % Time  Line Contents\n    59                                           @profile\n    60                                           def huge_nested_layout():\n    61         1          2.0      2.0      0.0      root = YGNodeNew()\n    62        11          6.0      0.5      0.0      for i in range(10):\n    63        10         15.0      1.5      0.0          child = YGNodeNew()\n    64        10         11.0      1.1      0.0          YGNodeStyleSetFlexGrow(child, 1)\n    65        10         11.0      1.1      0.0          YGNodeStyleSetWidth(child, 10)\n    66        10         11.0      1.1      0.0          YGNodeStyleSetHeight(child, 10)\n    67        10         13.0      1.3      0.0          YGNodeInsertChild(root, child, 0)\n    68\n    69       110         44.0      0.4      0.0          for ii in range(10):\n    70       100        178.0      1.8      0.2              grand_child = YGNodeNew()\n    71       100        115.0      1.1      0.1              YGNodeStyleSetFlexDirection(grand_child, YGFlexDirection.Row)\n    72       100        101.0      1.0      0.1              YGNodeStyleSetFlexGrow(grand_child, 1)\n    73       100         97.0      1.0      0.1              YGNodeStyleSetWidth(grand_child, 10)\n    74       100         98.0      1.0      0.1              YGNodeStyleSetHeight(grand_child, 10)\n    75       100        114.0      1.1      0.1              YGNodeInsertChild(child, grand_child, 0)\n    76\n    77      1100        561.0      0.5      0.6              for iii in range(10):\n    78      1000       1782.0      1.8      1.9                  grand_grand_child = YGNodeNew()\n    79      1000       1037.0      1.0      1.1                  YGNodeStyleSetFlexGrow(grand_grand_child, 1)\n    80      1000        997.0      1.0      1.1                  YGNodeStyleSetWidth(grand_grand_child, 10)\n    81      1000        959.0      1.0      1.0                  YGNodeStyleSetHeight(grand_grand_child, 10)\n    82      1000       1177.0      1.2      1.3                  YGNodeInsertChild(grand_child, grand_grand_child, 0)\n    83\n    84     11000       5725.0      0.5      6.1                  for iiii in range(10):\n    85     10000      17682.0      1.8     18.8                      grand_grand_grand_child = YGNodeNew()\n    86     10000      11032.0      1.1     11.8                      YGNodeStyleSetFlexDirection(grand_grand_grand_child, YGFlexDirection.Row)\n    87     10000      10126.0      1.0     10.8                      YGNodeStyleSetFlexGrow(grand_grand_grand_child, 1)\n    88     10000      10035.0      1.0     10.7                      YGNodeStyleSetWidth(grand_grand_grand_child, 10)\n    89     10000       9814.0      1.0     10.5                      YGNodeStyleSetHeight(grand_grand_grand_child, 10)\n    90     10000      11796.0      1.2     12.6                      YGNodeInsertChild(grand_grand_child, grand_grand_grand_child, 0)\n    91\n    92         1       8696.0   8696.0      9.3      YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirection.LTR)\n    93         1       1608.0   1608.0      1.7      YGNodeFreeRecursive(root)\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python bindings for YogaLayout",
    "version": "0.1.19",
    "project_urls": {
        "Homepage": "https://github.com/dzhsurf/poga",
        "Repository": "https://github.com/dzhsurf/poga"
    },
    "split_keywords": [
        "yogalayout",
        " yoga",
        " poga"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c4fb056f65a52b00f445c096f75219547ca383c21e29529648aaa8f4f6f55916",
                "md5": "4c7b7c175fd95dd89b6a20f70b874755",
                "sha256": "dcf54dec0416585e75de001366c892e696480e608102cbcd97a319af94b01b1d"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "4c7b7c175fd95dd89b6a20f70b874755",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 494773,
            "upload_time": "2025-03-19T05:52:52",
            "upload_time_iso_8601": "2025-03-19T05:52:52.294140Z",
            "url": "https://files.pythonhosted.org/packages/c4/fb/056f65a52b00f445c096f75219547ca383c21e29529648aaa8f4f6f55916/poga-0.1.19-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "12afca23d19eacf9aa553f668f3a03c0e1f2266e27167f964d29d877883e1b53",
                "md5": "806cd0b26d443861f8028dd0b950a188",
                "sha256": "ba224a23a0c38597729a79e539496ceb6f9c610e1956e8b2b4e444828db1a393"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp310-cp310-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "806cd0b26d443861f8028dd0b950a188",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 568866,
            "upload_time": "2025-03-19T05:52:53",
            "upload_time_iso_8601": "2025-03-19T05:52:53.659807Z",
            "url": "https://files.pythonhosted.org/packages/12/af/ca23d19eacf9aa553f668f3a03c0e1f2266e27167f964d29d877883e1b53/poga-0.1.19-cp310-cp310-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ffcd9c7afac44537d9a232d4a6ce4a18e6ad18e8fa696af29859a6316b4b6c12",
                "md5": "7fc9ce4d4f478c3747ea2c2987b2aecb",
                "sha256": "578b5e0141b197a32a0fc7135378467c7be59c8b155b8712f806a8750d3eaac3"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp310-cp310-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7fc9ce4d4f478c3747ea2c2987b2aecb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 3771627,
            "upload_time": "2025-03-19T05:52:55",
            "upload_time_iso_8601": "2025-03-19T05:52:55.118542Z",
            "url": "https://files.pythonhosted.org/packages/ff/cd/9c7afac44537d9a232d4a6ce4a18e6ad18e8fa696af29859a6316b4b6c12/poga-0.1.19-cp310-cp310-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "05f72f14c5b3225c6bade2558ef14f7d3dc3551b0973effcb6ea62f82179ea85",
                "md5": "729ef9e3e8d67610420577f438b121a7",
                "sha256": "3a95c91feb6e1e9acc0e2e64816c0d0cb3965ff20e57d629e4e92cd8487f8dd5"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "729ef9e3e8d67610420577f438b121a7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 254251,
            "upload_time": "2025-03-19T05:52:56",
            "upload_time_iso_8601": "2025-03-19T05:52:56.438566Z",
            "url": "https://files.pythonhosted.org/packages/05/f7/2f14c5b3225c6bade2558ef14f7d3dc3551b0973effcb6ea62f82179ea85/poga-0.1.19-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1bef399ceabfbad3b2d3ca737b75627f0e7b371dff3fcd30000bcb29ec4cb78d",
                "md5": "4fe0fcccb78552ce9406d3e3b25d5cca",
                "sha256": "fe92215c2e31f05ccfe76f1adae00f7a641bf26204d241e5c4f191a10333603a"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "4fe0fcccb78552ce9406d3e3b25d5cca",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 497398,
            "upload_time": "2025-03-19T05:52:57",
            "upload_time_iso_8601": "2025-03-19T05:52:57.559324Z",
            "url": "https://files.pythonhosted.org/packages/1b/ef/399ceabfbad3b2d3ca737b75627f0e7b371dff3fcd30000bcb29ec4cb78d/poga-0.1.19-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1ec8b1daf8860b93d66c9fce6469d7ddb9969bad1062cb8b285cea6451530185",
                "md5": "15429df976620c087a22d4be11ec5841",
                "sha256": "ef95a9a88ec9e3f3a8b117f6e186f61e7d021e7e60646158efc9720c0d743c9c"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp311-cp311-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "15429df976620c087a22d4be11ec5841",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 571490,
            "upload_time": "2025-03-19T05:52:58",
            "upload_time_iso_8601": "2025-03-19T05:52:58.707639Z",
            "url": "https://files.pythonhosted.org/packages/1e/c8/b1daf8860b93d66c9fce6469d7ddb9969bad1062cb8b285cea6451530185/poga-0.1.19-cp311-cp311-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f9d4ee13da01687ff567432eb434aae1af68b87d66687684cad4f2b987359fe",
                "md5": "0ca31d60a22f8a87ed267b2e531cb64b",
                "sha256": "8d556d3aa2e557884530174dc7433e7f0fec6ccc226489aa50be6c70b4303f10"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp311-cp311-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0ca31d60a22f8a87ed267b2e531cb64b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 3797947,
            "upload_time": "2025-03-19T05:53:00",
            "upload_time_iso_8601": "2025-03-19T05:53:00.545661Z",
            "url": "https://files.pythonhosted.org/packages/0f/9d/4ee13da01687ff567432eb434aae1af68b87d66687684cad4f2b987359fe/poga-0.1.19-cp311-cp311-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bcf65daf1ef64e317a66855eee512ba126efb438479c5101dc41202df6eddc98",
                "md5": "e456b1506bd7f690f63a2010a60ab833",
                "sha256": "44d790e285dd1643e2e1b1e8635bfc551864b1baa4f874c9089584538026a4eb"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e456b1506bd7f690f63a2010a60ab833",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 254220,
            "upload_time": "2025-03-19T05:53:01",
            "upload_time_iso_8601": "2025-03-19T05:53:01.800351Z",
            "url": "https://files.pythonhosted.org/packages/bc/f6/5daf1ef64e317a66855eee512ba126efb438479c5101dc41202df6eddc98/poga-0.1.19-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "de686f93620271c4950c5712565f45c77e3023493e12dbf82d96b70e008d4e31",
                "md5": "4764c1e48e46040d540869317867f5c2",
                "sha256": "d06d64d951df2f815c5e6ace77b9932bd07fc3d612cb2270cf1ab61f375df3b6"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp312-cp312-macosx_10_13_universal2.whl",
            "has_sig": false,
            "md5_digest": "4764c1e48e46040d540869317867f5c2",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 502247,
            "upload_time": "2025-03-19T05:53:02",
            "upload_time_iso_8601": "2025-03-19T05:53:02.978562Z",
            "url": "https://files.pythonhosted.org/packages/de/68/6f93620271c4950c5712565f45c77e3023493e12dbf82d96b70e008d4e31/poga-0.1.19-cp312-cp312-macosx_10_13_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "34898bf33395ca562ebf386c538b2b7d855dbf0ab1a65a0753bbd28934e2846e",
                "md5": "767bfc9b4d2be46759c8c4e83efb67c4",
                "sha256": "34bc6127b1b26e7df29cc2330264730ec804cbf262b5e95be59734ec0711022e"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp312-cp312-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "767bfc9b4d2be46759c8c4e83efb67c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 576336,
            "upload_time": "2025-03-19T05:53:04",
            "upload_time_iso_8601": "2025-03-19T05:53:04.883222Z",
            "url": "https://files.pythonhosted.org/packages/34/89/8bf33395ca562ebf386c538b2b7d855dbf0ab1a65a0753bbd28934e2846e/poga-0.1.19-cp312-cp312-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "95798702bf29f927bfe42ca75e7c70e464746bf6c131eafe42bec1d97be25e58",
                "md5": "08bf9eaac943352cc3f22e2252c39bf5",
                "sha256": "ea2be1814e1d684223e0737ac6763ba21350c271a1944222e30b39b345cec2fa"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp312-cp312-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "08bf9eaac943352cc3f22e2252c39bf5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 3742474,
            "upload_time": "2025-03-19T05:53:06",
            "upload_time_iso_8601": "2025-03-19T05:53:06.273569Z",
            "url": "https://files.pythonhosted.org/packages/95/79/8702bf29f927bfe42ca75e7c70e464746bf6c131eafe42bec1d97be25e58/poga-0.1.19-cp312-cp312-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1eb5c66c0d7ee53dbbece8302e227035ec5e9be9764603da2fa43450f51a3ca8",
                "md5": "a1c1cc1a308a373be740cbf2f9a43f5d",
                "sha256": "026d2fc53c3b8e4bc735ffa6949347484d5bde8c9599f4b275ad8f7a6529c9b8"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a1c1cc1a308a373be740cbf2f9a43f5d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 256514,
            "upload_time": "2025-03-19T05:53:07",
            "upload_time_iso_8601": "2025-03-19T05:53:07.524515Z",
            "url": "https://files.pythonhosted.org/packages/1e/b5/c66c0d7ee53dbbece8302e227035ec5e9be9764603da2fa43450f51a3ca8/poga-0.1.19-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9f746830f5e466aff50e9cb9179f98b4c3ab6c8bae0463d027eba03d07008f32",
                "md5": "614e77accd6a94b9fc4e28e5d5389994",
                "sha256": "2f59d8ba01c4631aecacaa901da7958a9a49670dba8ba295f55e4c276067f1ff"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp38-cp38-macosx_11_0_universal2.whl",
            "has_sig": false,
            "md5_digest": "614e77accd6a94b9fc4e28e5d5389994",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 494339,
            "upload_time": "2025-03-19T05:53:08",
            "upload_time_iso_8601": "2025-03-19T05:53:08.589031Z",
            "url": "https://files.pythonhosted.org/packages/9f/74/6830f5e466aff50e9cb9179f98b4c3ab6c8bae0463d027eba03d07008f32/poga-0.1.19-cp38-cp38-macosx_11_0_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62ca46cfe123bb1adbccedd51796f6d90014a93ccdf2d42c3367a15dccb7e4e0",
                "md5": "e295bbc67040ce91ccd36ccc6fcc9da3",
                "sha256": "9a598a4b42ae314e582b506d9072e4cadafbcee009adbc1a7f0ffef56345d62a"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp38-cp38-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e295bbc67040ce91ccd36ccc6fcc9da3",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 568445,
            "upload_time": "2025-03-19T05:53:09",
            "upload_time_iso_8601": "2025-03-19T05:53:09.772069Z",
            "url": "https://files.pythonhosted.org/packages/62/ca/46cfe123bb1adbccedd51796f6d90014a93ccdf2d42c3367a15dccb7e4e0/poga-0.1.19-cp38-cp38-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3457d8e089c691d46ab74465fc5253f3c99b18b0bed6a3b4148e783de8c5211d",
                "md5": "edc5499f5455ca82d23ba934512ca7fc",
                "sha256": "b58e2c2c5d4c1a4952121907220571a7218ddb959263b93608634309e17049e1"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp38-cp38-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "edc5499f5455ca82d23ba934512ca7fc",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 3779625,
            "upload_time": "2025-03-19T05:53:11",
            "upload_time_iso_8601": "2025-03-19T05:53:11.047265Z",
            "url": "https://files.pythonhosted.org/packages/34/57/d8e089c691d46ab74465fc5253f3c99b18b0bed6a3b4148e783de8c5211d/poga-0.1.19-cp38-cp38-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f403cd316964f664aeb9b420e5cacf7d93d69bd67cd50d1d2e2930d2f250fce0",
                "md5": "0a85dd65c1cfb80ffa02570aa6b93705",
                "sha256": "266721cd1857a3c8e98be8db288e490e55ef4ff8e33ea2d376b4c98a89ca7c3e"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0a85dd65c1cfb80ffa02570aa6b93705",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 254336,
            "upload_time": "2025-03-19T05:53:12",
            "upload_time_iso_8601": "2025-03-19T05:53:12.257579Z",
            "url": "https://files.pythonhosted.org/packages/f4/03/cd316964f664aeb9b420e5cacf7d93d69bd67cd50d1d2e2930d2f250fce0/poga-0.1.19-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "84e5aa281f54de01bba3c260f667b631a645c6c7c5129d6ef0c4faccc701ac81",
                "md5": "46fa374b3af7c1c91bccceba71f4fdee",
                "sha256": "c51ff842533d35d0f8c37abf73b2c1d663804e6456a85032d3499b53f437e337"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "46fa374b3af7c1c91bccceba71f4fdee",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 495026,
            "upload_time": "2025-03-19T05:53:13",
            "upload_time_iso_8601": "2025-03-19T05:53:13.906767Z",
            "url": "https://files.pythonhosted.org/packages/84/e5/aa281f54de01bba3c260f667b631a645c6c7c5129d6ef0c4faccc701ac81/poga-0.1.19-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4fb571be9232664edfda194461a9f67b3d006d091546175ecbd42f98348563de",
                "md5": "33dae7e0885c4a350a579f3ff4103465",
                "sha256": "3cfce5e08e366ea3f26154c5ad46711b4531121f44e41fe03e12aee62c6f7c27"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp39-cp39-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "33dae7e0885c4a350a579f3ff4103465",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 569117,
            "upload_time": "2025-03-19T05:53:15",
            "upload_time_iso_8601": "2025-03-19T05:53:15.223002Z",
            "url": "https://files.pythonhosted.org/packages/4f/b5/71be9232664edfda194461a9f67b3d006d091546175ecbd42f98348563de/poga-0.1.19-cp39-cp39-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d9f93a9f3f335d33868382a2c5bc4427d4fc1bed842bc84711d20db0d86c518a",
                "md5": "d553d0fe7d6b7bf2181defa4ca124853",
                "sha256": "3e72ab99bcf61cde6762d85df842e37d988dfdaef870e0547b8145a20ad040f4"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp39-cp39-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d553d0fe7d6b7bf2181defa4ca124853",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 3764435,
            "upload_time": "2025-03-19T05:53:16",
            "upload_time_iso_8601": "2025-03-19T05:53:16.803733Z",
            "url": "https://files.pythonhosted.org/packages/d9/f9/3a9f3f335d33868382a2c5bc4427d4fc1bed842bc84711d20db0d86c518a/poga-0.1.19-cp39-cp39-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "27a33f226483059f11129d37cca122910cb34781e6ce934a9bb991260503c78e",
                "md5": "87ca541b3349181bfda8b7fbb3ce7f10",
                "sha256": "935733cfdee0897bb031f89d471c76ee1fa7dc16fefc09cd215ba0a55636a254"
            },
            "downloads": -1,
            "filename": "poga-0.1.19-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "87ca541b3349181bfda8b7fbb3ce7f10",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 244771,
            "upload_time": "2025-03-19T05:53:18",
            "upload_time_iso_8601": "2025-03-19T05:53:18.163334Z",
            "url": "https://files.pythonhosted.org/packages/27/a3/3f226483059f11129d37cca122910cb34781e6ce934a9bb991260503c78e/poga-0.1.19-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8196390e2cbb04c7c66567ad2a23677069c213904faf21e860da967c02e9d712",
                "md5": "7ff7b536cfb07875ac2b64fa242471bb",
                "sha256": "93a28fcf60a43fe53170c0b79763f81c906c8336691ad8f406db699696d78f7c"
            },
            "downloads": -1,
            "filename": "poga-0.1.19.tar.gz",
            "has_sig": false,
            "md5_digest": "7ff7b536cfb07875ac2b64fa242471bb",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 72561,
            "upload_time": "2025-03-19T05:53:19",
            "upload_time_iso_8601": "2025-03-19T05:53:19.172989Z",
            "url": "https://files.pythonhosted.org/packages/81/96/390e2cbb04c7c66567ad2a23677069c213904faf21e860da967c02e9d712/poga-0.1.19.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-03-19 05:53:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dzhsurf",
    "github_project": "poga",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "pybind11",
            "specs": [
                [
                    "==",
                    "2.13.6"
                ]
            ]
        }
    ],
    "lcname": "poga"
}
        
Elapsed time: 1.17295s