tinyscaler


Nametinyscaler JSON
Version 1.2.7 PyPI version JSON
download
home_page
SummaryA tiny, simple image scaler.
upload_time2023-09-16 01:14:49
maintainer
docs_urlNone
author
requires_python<3.12,>=3.7
licenseMIT License
keywords reinforcement learning gymnasium pettingzoo
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
    <img src="https://raw.githubusercontent.com/Farama-Foundation/TinyScaler/main/tinyscaler-text.png" width="500px"/>
</p>

A small CPU image scaling library with SIMD support on x86_64 and Arm (Neon). This project is aimed to replace OpenCV for image resizing, resolving installation inconveniences and compatibility issues. We developed this for future use in Gymnasium and PettingZoo wrappers.

## Installation
You can install from PyPI using `pip install tinyscaler`. Linux and macOS with Python 3.7, 3.8, 3.9, 3.10 and 3.11 are supported.

## Usage
Tinyscaler contains a single external function, `scale` that using a numpy array input for the image and the new resized shape, returns the resized image. 

```python
import numpy as np
import tinyscaler

img = np.random.rand(64, 64, 4).astype(np.float32)

resize_img = tinyscaler.scale(img, (32, 32))
print(resize_img.shape, resize_img.dtype)  # (32, 32) np.float32
```

TinyScaler supports mode='area', mode='bilinear', and mode='nearest' filtering. It also allows one to pass a destination buffer in order to avoid duplicate memory allocations.

Area filtering is only really useful for downscaling, bilinear will be used even when area filtering is set if upscaling. Area filtering is also likely not worth it when downscaling less than or equal to 2x.

TinyScaler is used through a single function. The full signature is:

```python
scale(src : np.ndarray, size : tuple, mode='area', dst : np.ndarray = None)
```

Note that the `size` tuple parameter is (width, height). However, the numpy arrays have dimensions ordered as (height, width, channels). This is similar to OpenCV.

TinyScaler expects a contiguous numpy array. If it is not contiguous, it will throw an error. You can make a non-contiguous numpy array contiguous by calling `np.ascontiguousarray`. Usually a numpy array will already be contiguous.

If the final array dimension is not 4 (RGBA), it will automatically convert to it. Further, if the array is uint8, it will be converted to float32. So the prefered array has a shape `(height, width, 4)` and `dtype=np.float32`.

Finally, downscaling is the focus of TinyScaler. It can also upscale, but it will not be as fast as a more complex separable algorithm in that case.

## Performance
In a [simple benchmark](./examples/benchmark.py), we resized the same image (4928x3279) down to (852x567) 100 times using bilinear filtering with several libraries. Here are the times (in seconds) spent (measured with Python's perf_counter) on a AMD 1950x:

```
Time elapsed for tinyscaler: 0.7968465110002398
Time elapsed for OpenCV: 0.48667862100001
Time elapsed for Pillow: 12.672875003999707
Time elapsed for skimage: 164.45401711399973
```

And with area filtering (just TinyScaler and OpenCV):

```
Time elapsed for tinyscaler: 4.34793155800071
Time elapsed for OpenCV: 8.118138265999733
```

All methods were forced to use a single thread. OpenCV is slightly faster than TinyScaler for bilinear filtering, but TinyScaler remains very fast regardless.

Interestingly, for area filtering, TinyScaler is faster (almost 2x).


            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "tinyscaler",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "<3.12,>=3.7",
    "maintainer_email": "",
    "keywords": "Reinforcement Learning,Gymnasium,PettingZoo",
    "author": "",
    "author_email": "Farama Foundation <contact@farama.org>",
    "download_url": "https://files.pythonhosted.org/packages/eb/2a/ec77996374074810119493bd54a906f5d060bfcf8a4df31d1eba39a19429/tinyscaler-1.2.7.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n    <img src=\"https://raw.githubusercontent.com/Farama-Foundation/TinyScaler/main/tinyscaler-text.png\" width=\"500px\"/>\n</p>\n\nA small CPU image scaling library with SIMD support on x86_64 and Arm (Neon). This project is aimed to replace OpenCV for image resizing, resolving installation inconveniences and compatibility issues. We developed this for future use in Gymnasium and PettingZoo wrappers.\n\n## Installation\nYou can install from PyPI using `pip install tinyscaler`. Linux and macOS with Python 3.7, 3.8, 3.9, 3.10 and 3.11 are supported.\n\n## Usage\nTinyscaler contains a single external function, `scale` that using a numpy array input for the image and the new resized shape, returns the resized image. \n\n```python\nimport numpy as np\nimport tinyscaler\n\nimg = np.random.rand(64, 64, 4).astype(np.float32)\n\nresize_img = tinyscaler.scale(img, (32, 32))\nprint(resize_img.shape, resize_img.dtype)  # (32, 32) np.float32\n```\n\nTinyScaler supports mode='area', mode='bilinear', and mode='nearest' filtering. It also allows one to pass a destination buffer in order to avoid duplicate memory allocations.\n\nArea filtering is only really useful for downscaling, bilinear will be used even when area filtering is set if upscaling. Area filtering is also likely not worth it when downscaling less than or equal to 2x.\n\nTinyScaler is used through a single function. The full signature is:\n\n```python\nscale(src : np.ndarray, size : tuple, mode='area', dst : np.ndarray = None)\n```\n\nNote that the `size` tuple parameter is (width, height). However, the numpy arrays have dimensions ordered as (height, width, channels). This is similar to OpenCV.\n\nTinyScaler expects a contiguous numpy array. If it is not contiguous, it will throw an error. You can make a non-contiguous numpy array contiguous by calling `np.ascontiguousarray`. Usually a numpy array will already be contiguous.\n\nIf the final array dimension is not 4 (RGBA), it will automatically convert to it. Further, if the array is uint8, it will be converted to float32. So the prefered array has a shape `(height, width, 4)` and `dtype=np.float32`.\n\nFinally, downscaling is the focus of TinyScaler. It can also upscale, but it will not be as fast as a more complex separable algorithm in that case.\n\n## Performance\nIn a [simple benchmark](./examples/benchmark.py), we resized the same image (4928x3279) down to (852x567) 100 times using bilinear filtering with several libraries. Here are the times (in seconds) spent (measured with Python's perf_counter) on a AMD 1950x:\n\n```\nTime elapsed for tinyscaler: 0.7968465110002398\nTime elapsed for OpenCV: 0.48667862100001\nTime elapsed for Pillow: 12.672875003999707\nTime elapsed for skimage: 164.45401711399973\n```\n\nAnd with area filtering (just TinyScaler and OpenCV):\n\n```\nTime elapsed for tinyscaler: 4.34793155800071\nTime elapsed for OpenCV: 8.118138265999733\n```\n\nAll methods were forced to use a single thread. OpenCV is slightly faster than TinyScaler for bilinear filtering, but TinyScaler remains very fast regardless.\n\nInterestingly, for area filtering, TinyScaler is faster (almost 2x).\n\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "A tiny, simple image scaler.",
    "version": "1.2.7",
    "project_urls": {
        "Bug Report": "https://github.com/Farama-Foundation/TinyScaler/issues",
        "Documentation": "https://github.com/Farama-Foundation/TinyScaler",
        "Homepage": "https://farama.org",
        "Repository": "https://github.com/Farama-Foundation/TinyScaler"
    },
    "split_keywords": [
        "reinforcement learning",
        "gymnasium",
        "pettingzoo"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4d75e5bf4d5141be9bd2d2b09238f50f3e409f4e4be9e506d751b88c96539b55",
                "md5": "0f737a780c06429d7b87ab5de0ed0696",
                "sha256": "bbb98ced396d4829a41aa9c7c895df4bcb3801a3bbe963978c90d12b07110731"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp310-cp310-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0f737a780c06429d7b87ab5de0ed0696",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.12,>=3.7",
            "size": 96404,
            "upload_time": "2023-09-16T01:14:22",
            "upload_time_iso_8601": "2023-09-16T01:14:22.745665Z",
            "url": "https://files.pythonhosted.org/packages/4d/75/e5bf4d5141be9bd2d2b09238f50f3e409f4e4be9e506d751b88c96539b55/tinyscaler-1.2.7-cp310-cp310-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e21c5fba52419ce683905bee015bb73c178dd72871b9211495b3b194ccd26f29",
                "md5": "6ea342b917e19a7f399d76643d0f52fb",
                "sha256": "d062e0e33f6104d625fff9b57aa53511c39d2dc3bb711686f6992a7fbfe41336"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6ea342b917e19a7f399d76643d0f52fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.12,>=3.7",
            "size": 517127,
            "upload_time": "2023-09-16T01:14:24",
            "upload_time_iso_8601": "2023-09-16T01:14:24.784269Z",
            "url": "https://files.pythonhosted.org/packages/e2/1c/5fba52419ce683905bee015bb73c178dd72871b9211495b3b194ccd26f29/tinyscaler-1.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0d81f56a68b0b694dc18e8c513f6e93155ec1c2dc83bf24ebe884a14198e722f",
                "md5": "326fbb310a2e945790055578531dded6",
                "sha256": "a96f008975d4d167102a2671fb54fb6ace6ff2580fede3b79daeca99a01e5d6e"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "326fbb310a2e945790055578531dded6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.12,>=3.7",
            "size": 84576,
            "upload_time": "2023-09-16T01:14:26",
            "upload_time_iso_8601": "2023-09-16T01:14:26.723623Z",
            "url": "https://files.pythonhosted.org/packages/0d/81/f56a68b0b694dc18e8c513f6e93155ec1c2dc83bf24ebe884a14198e722f/tinyscaler-1.2.7-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ef63f68faf80475684e9971f61e85f62f7b1f4b5ac3b1f31bc97c858f4cceba4",
                "md5": "849f574aad1221e03ed6e22b8d1ca93c",
                "sha256": "bf63243a08e214e3db149435741b779db357c376636e17ddf153bf9f6ada041c"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "849f574aad1221e03ed6e22b8d1ca93c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.12,>=3.7",
            "size": 182029,
            "upload_time": "2023-09-16T01:14:28",
            "upload_time_iso_8601": "2023-09-16T01:14:28.374461Z",
            "url": "https://files.pythonhosted.org/packages/ef/63/f68faf80475684e9971f61e85f62f7b1f4b5ac3b1f31bc97c858f4cceba4/tinyscaler-1.2.7-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eee822ab483b56214a5821bb185a98a3ea11b1bdc17dad4e02aafd1fdda69c2e",
                "md5": "86e9fa4f49f8d7bc943ef651d23c0263",
                "sha256": "7d2d129f71c518d9c0c25f5e9f3a7f7a31af62e7e7e6f8750ddf0154ed76a58a"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "86e9fa4f49f8d7bc943ef651d23c0263",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.12,>=3.7",
            "size": 563794,
            "upload_time": "2023-09-16T01:14:31",
            "upload_time_iso_8601": "2023-09-16T01:14:31.358154Z",
            "url": "https://files.pythonhosted.org/packages/ee/e8/22ab483b56214a5821bb185a98a3ea11b1bdc17dad4e02aafd1fdda69c2e/tinyscaler-1.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2d2efc26eac8b54ab8c939f640fd5981786e8b2630cd639d4600ce48e9e00cfd",
                "md5": "cf5f1fbd9c64758916527010e05a3eeb",
                "sha256": "c14d302cd609d8c8e53ddf15b3ab43fa3c975d648ffcf16276c8b131ab849f85"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "cf5f1fbd9c64758916527010e05a3eeb",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.12,>=3.7",
            "size": 84802,
            "upload_time": "2023-09-16T01:14:33",
            "upload_time_iso_8601": "2023-09-16T01:14:33.408329Z",
            "url": "https://files.pythonhosted.org/packages/2d/2e/fc26eac8b54ab8c939f640fd5981786e8b2630cd639d4600ce48e9e00cfd/tinyscaler-1.2.7-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f90295d8f393b0696061a92b9a2c05ac83c44d3ef9b9c7bd45aea4a1f6d1bd2",
                "md5": "c6084a215d9dac633df256b7b38ffcfd",
                "sha256": "3ef723fbe119614dfdd8a7bd40d73c17defaac6765f60c44693858bd5cd70fbc"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp37-cp37m-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c6084a215d9dac633df256b7b38ffcfd",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": "<3.12,>=3.7",
            "size": 97034,
            "upload_time": "2023-09-16T01:14:35",
            "upload_time_iso_8601": "2023-09-16T01:14:35.145255Z",
            "url": "https://files.pythonhosted.org/packages/0f/90/295d8f393b0696061a92b9a2c05ac83c44d3ef9b9c7bd45aea4a1f6d1bd2/tinyscaler-1.2.7-cp37-cp37m-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3d3eef6f27a13ff6aaa54d6c0d0caea976c367caa886cf96abf404d859500b96",
                "md5": "6a5645d463f6c98f3e181fd03cbecf6c",
                "sha256": "c6700a37bd42615944099994f2aa473be215e25d79803fcac9de849205c7b149"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6a5645d463f6c98f3e181fd03cbecf6c",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": "<3.12,>=3.7",
            "size": 490923,
            "upload_time": "2023-09-16T01:14:36",
            "upload_time_iso_8601": "2023-09-16T01:14:36.285233Z",
            "url": "https://files.pythonhosted.org/packages/3d/3e/ef6f27a13ff6aaa54d6c0d0caea976c367caa886cf96abf404d859500b96/tinyscaler-1.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "57a83409c64a71dc478e312c52c38a83c04f330aeb7d8abd3e34b5fd84939b9d",
                "md5": "65d5d19fd2ff6ac502ed9c11bac53587",
                "sha256": "26d488778686392a0441e598df7ebc45ad014663e60384ef6170dd793f80d275"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "65d5d19fd2ff6ac502ed9c11bac53587",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": "<3.12,>=3.7",
            "size": 84621,
            "upload_time": "2023-09-16T01:14:37",
            "upload_time_iso_8601": "2023-09-16T01:14:37.731749Z",
            "url": "https://files.pythonhosted.org/packages/57/a8/3409c64a71dc478e312c52c38a83c04f330aeb7d8abd3e34b5fd84939b9d/tinyscaler-1.2.7-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "60af9b04e56d74d2bb6a63d8797d065913caed4869209a4ae9a57905fec41801",
                "md5": "c22f7f032219e2e5d8e0b72a80f6b45b",
                "sha256": "f80203589d883896c86fe94165967be453fbb0fe47c9bc64521aee15e125f202"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp38-cp38-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c22f7f032219e2e5d8e0b72a80f6b45b",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": "<3.12,>=3.7",
            "size": 97521,
            "upload_time": "2023-09-16T01:14:39",
            "upload_time_iso_8601": "2023-09-16T01:14:39.272702Z",
            "url": "https://files.pythonhosted.org/packages/60/af/9b04e56d74d2bb6a63d8797d065913caed4869209a4ae9a57905fec41801/tinyscaler-1.2.7-cp38-cp38-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d4c31ea335c680d6624150e63f4ebbbe7e911aeb2982b901c5f7d9722576b641",
                "md5": "2459a7b322b3de361fa3c0ddd84e9277",
                "sha256": "ef4843aaa2647d7ae7a26ba66dbd1d1b31d161ca558f2c385bc6b02277d27fdb"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2459a7b322b3de361fa3c0ddd84e9277",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": "<3.12,>=3.7",
            "size": 532265,
            "upload_time": "2023-09-16T01:14:41",
            "upload_time_iso_8601": "2023-09-16T01:14:41.062357Z",
            "url": "https://files.pythonhosted.org/packages/d4/c3/1ea335c680d6624150e63f4ebbbe7e911aeb2982b901c5f7d9722576b641/tinyscaler-1.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "67fc180c6a5bd719b9849bbd6633e6e8d0690d5fae86e6645746c214af19c97c",
                "md5": "85e6634f6b8768fd3c1e2e671f34765f",
                "sha256": "8e6b605ef00fc65a27f294742514f67d9b4c37d41bfe586e2609ab03a41f2e74"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "85e6634f6b8768fd3c1e2e671f34765f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": "<3.12,>=3.7",
            "size": 85212,
            "upload_time": "2023-09-16T01:14:43",
            "upload_time_iso_8601": "2023-09-16T01:14:43.162418Z",
            "url": "https://files.pythonhosted.org/packages/67/fc/180c6a5bd719b9849bbd6633e6e8d0690d5fae86e6645746c214af19c97c/tinyscaler-1.2.7-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "992b3af13cae65b378bff58abd937b6b7227864db6b36fde1b251a68839022f9",
                "md5": "a661d84f364b991c94b64c643ce5133e",
                "sha256": "2847420c81064c8bd3397bdcd83e2706cd914cdb9cbde5300ed968c14954b9d3"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp39-cp39-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a661d84f364b991c94b64c643ce5133e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.12,>=3.7",
            "size": 97303,
            "upload_time": "2023-09-16T01:14:44",
            "upload_time_iso_8601": "2023-09-16T01:14:44.537668Z",
            "url": "https://files.pythonhosted.org/packages/99/2b/3af13cae65b378bff58abd937b6b7227864db6b36fde1b251a68839022f9/tinyscaler-1.2.7-cp39-cp39-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e0f8a60b0f56024330d3cf9f15c66a863bb3d788287b86549100500c179ce3c8",
                "md5": "d9af5a397e8088cc50c2b28a5beacd3d",
                "sha256": "9d86fe85fa37cfaedb521c9eb3a804b6ab202924be221049b784220c5ca49546"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d9af5a397e8088cc50c2b28a5beacd3d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.12,>=3.7",
            "size": 519517,
            "upload_time": "2023-09-16T01:14:45",
            "upload_time_iso_8601": "2023-09-16T01:14:45.870091Z",
            "url": "https://files.pythonhosted.org/packages/e0/f8/a60b0f56024330d3cf9f15c66a863bb3d788287b86549100500c179ce3c8/tinyscaler-1.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bb7035d0061d2a2d25e5f1023209e9ad7435691863e70521f346e7e079d2cefc",
                "md5": "75a880e0b241dc54f77dd7ffbc06e577",
                "sha256": "ce1e10fc54d02bb49ea1f72f76d320c50739eb4ff3e6cbb82148b4f84272220b"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "75a880e0b241dc54f77dd7ffbc06e577",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.12,>=3.7",
            "size": 85155,
            "upload_time": "2023-09-16T01:14:47",
            "upload_time_iso_8601": "2023-09-16T01:14:47.414767Z",
            "url": "https://files.pythonhosted.org/packages/bb/70/35d0061d2a2d25e5f1023209e9ad7435691863e70521f346e7e079d2cefc/tinyscaler-1.2.7-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb2aec77996374074810119493bd54a906f5d060bfcf8a4df31d1eba39a19429",
                "md5": "0da71a928a0d24a90f66a664749c60aa",
                "sha256": "1c0b34b41cca3ae9b09c20fee27499833345b9264617bdd23c896733676d82d8"
            },
            "downloads": -1,
            "filename": "tinyscaler-1.2.7.tar.gz",
            "has_sig": false,
            "md5_digest": "0da71a928a0d24a90f66a664749c60aa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.12,>=3.7",
            "size": 156229,
            "upload_time": "2023-09-16T01:14:49",
            "upload_time_iso_8601": "2023-09-16T01:14:49.230919Z",
            "url": "https://files.pythonhosted.org/packages/eb/2a/ec77996374074810119493bd54a906f5d060bfcf8a4df31d1eba39a19429/tinyscaler-1.2.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-16 01:14:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Farama-Foundation",
    "github_project": "TinyScaler",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "tinyscaler"
}
        
Elapsed time: 0.11100s