Name | modak JSON |
Version |
0.3.7
JSON |
| download |
home_page | None |
Summary | A simple, opinionated task manager |
upload_time | 2025-07-17 13:30:23 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT OR Apache-2.0 |
keywords |
task
job
scheduler
monitor
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<!-- markdownlint-disable MD033 MD041 -->
<p align="center">
<h1 align="center">modak</h1>
</p>
<p align="center">
<img alt="GitHub Release" src="https://img.shields.io/github/v/release/denehoffman/modak?style=for-the-badge&logo=github"></a>
<a href="https://github.com/denehoffman/modak/commits/main/" alt="Latest Commits">
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/denehoffman/modak?style=for-the-badge&logo=github"></a>
<a href="LICENSE-APACHE" alt="License">
<img alt="GitHub License" src="https://img.shields.io/github/license/denehoffman/modak?style=for-the-badge"></a>
<a href="https://pypi.org/project/modak/" alt="View project on PyPI">
<img alt="PyPI - Version" src="https://img.shields.io/pypi/v/modak?style=for-the-badge&logo=python&logoColor=yellow&labelColor=blue"></a>
</p>
`modak` is a simple-to-use, opinionated task queue system with dependency
management, resource allocation, and isolation control. Tasks are run
respecting topological dependencies, resource limits, and optional isolation.
This library only has two classes, `Task`s, which are an abstract class with a
single method to override, `run(self) -> None`, and a `TaskQueue` which manages
the execution order. Additionally, `modak` comes with a task monitor TUI which
can be invoked with the `modak` shell command.
The `TaskQueue` has been written in Rust to get past issues with parallelism
and the GIL. Instead of using a thread pool or even a multiprocessing pool,
the tasks are serialized into bytes and passed to the Rust-side manager, which
handles dispatching and execution. Each task is then run as a separate subprocess
spawned in a Rust thread. This means the only way to share state between tasks is
by writing to an output file and having a task depend on that file.
By default, `modak` scripts will create a state file called `.modak` in the
current working directory. This can be changed by setting it in the `TaskQueue`'s
initialization method. The `modak` CLI also supports an optional argument to
point to the location of the state file.
## Features
- Topological task scheduling
- Persistent state and log files
- Resource-aware execution
- Isolated task handling
- Skipping of previously completed tasks
## Installation
```shell
pip install modak
```
Or with `uv`:
```shell
pip install modak
```
## FAQ
> Q: What do you mean by "opinionated"?
A: The library is meant to do one thing (and hopefully do it well): run tasks
and write output files. Some users might want more flexibility, like writing
to a database or having a target that isn't written to at all, but that is
not a goal of this library. If you need this level of control, try [`airflow`](https://airflow.apache.org/)
or [`luigi`](https://github.com/spotify/luigi).
> Q: Why make another task manager?
A: [`luigi`](https://github.com/spotify/luigi) is nice, but I've been annoyed by
the poor type hints for task parameters. It's also very confusing for
first-time users, and has a lot of features that I don't really think people
use unless they are working with products like Spotify. I built `modak` with
research pipelines in mind, so I wanted something that was so simple to use,
you don't have to think too hard about what you're doing and can focus on
the data instead. I haven't used [airflow](https://airflow.apache.org/) much,
but it also seems like a tool intended for enterprise. My goal here is
simplicity and a minimal learning curve. There are only two classes. `luigi`
has the added annoyance of running a web server to visualize the state of the
DAG, which is very tricky to use on a remote server if you don't have the
proper permissions.
> Q: Isn't Rust a bit overkill?
A: Rust isn't as scary as it sounds. I don't actually care much about memory
safety (although I'll take it for free), I like the development experience.
> Q: Any sharp corners?
A: In development, I've found that libraries that do something when imported
need to be handled with care. Such libraries should be imported inside the
`run` method of the task. This is because the task gets serialized and sent
to the `__main__` module, but the imports from your code are run before
serialization. An example of this is the `loguru` library, which sets
up the global logger [on import](https://github.com/Delgan/loguru/blob/a69bfc451413f71b81761a238db4b5833cf0a992/loguru/__init__.py#L18).
If `loguru` is only imported outside the task, the `logger` instance will have
no sink added because [these lines](https://github.com/Delgan/loguru/blob/a69bfc451413f71b81761a238db4b5833cf0a992/loguru/__init__.py#L31-L32)
will not be run when the task is deserialized. This will not effect most code,
it's just something to be aware of.
## Examples
### A simple chain of tasks
```python
from modak import Task, TaskQueue
class PrintTask(Task):
def run(self):
self.logger.info(f"Running {self.name}")
t1 = PrintTask(name="task1")
t2 = PrintTask(name="task2", inputs=[t1])
t3 = PrintTask(name="task3", inputs=[t2])
queue = TaskQueue('example1')
queue.run([t3])
```
### Fan-in, fan-out
```python
from pathlib import Path
from modak import Task, TaskQueue
class DummyTask(Task):
def run(self):
self.logger.info(f"Running {self.name}")
for output in self.outputs:
output.write_text(f"Output of {self.name}")
# Leaf tasks
a = DummyTask(name="A", outputs=[Path("a.out")])
b = DummyTask(name="B", outputs=[Path("b.out")])
c = DummyTask(name="C", outputs=[Path("c.out")])
# Fan-in: D depends on A, B, C
d = DummyTask(name="D", inputs=[a, b, c], outputs=[Path("d.out")])
# Fan-out: E and F both depend on D
e = DummyTask(name="E", inputs=[d], outputs=[Path("e.out")])
f = DummyTask(name="F", inputs=[d], outputs=[Path("f.out")])
queue = TaskQueue('example2')
queue.run([e, f])
```
### A complex workflow
```python
from pathlib import Path
from modak import Task, TaskQueue
class SimTask(Task):
def run(self):
self.logger.info(f"{self.name} starting with {self.resources}")
for out in self.outputs:
out.write_text(f"Generated by {self.name}")
# Raw data preprocessing
pre_a = SimTask(name="PreA", outputs=[Path("a.pre")], resources={"cpu": 1})
pre_b = SimTask(name="PreB", outputs=[Path("b.pre")], resources={"cpu": 1})
pre_c = SimTask(name="PreC", outputs=[Path("c.pre")], resources={"cpu": 1})
# Feature extraction (can run in parallel)
feat1 = SimTask(name="Feature1", inputs=[pre_a], outputs=[Path("a.feat")], resources={"cpu": 2})
feat2 = SimTask(name="Feature2", inputs=[pre_b], outputs=[Path("b.feat")], resources={"cpu": 2})
feat3 = SimTask(name="Feature3", inputs=[pre_c], outputs=[Path("c.feat")], resources={"cpu": 2})
# Aggregation step
aggregate = SimTask(
name="Aggregate",
inputs=[feat1, feat2, feat3],
outputs=[Path("agg.out")],
resources={"cpu": 3}
)
# Final model training (expensive, must be isolated)
train = SimTask(
name="TrainModel",
inputs=[aggregate],
outputs=[Path("model.bin")],
isolated=True,
resources={"cpu": 3, "gpu": 1}
)
# Side analysis and visualization can run independently
viz = SimTask(name="Visualization", inputs=[feat1, feat2], outputs=[Path("viz.png")], resources={"cpu": 1})
stats = SimTask(name="Stats", inputs=[feat3], outputs=[Path("stats.txt")], resources={"cpu": 1})
queue = TaskQueue(
'example3',
workers=4,
resources={"cpu": 4, "gpu": 1}
)
queue.run([train, viz, stats])
```
## Future Plans
I'll probably make small improvements to the TUI and add features as I find the
need. Contributions are welcome, just open an issue or pull request on GitHub
and I'll try to respond as soon as I can.
Raw data
{
"_id": null,
"home_page": null,
"name": "modak",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "task, job, scheduler, monitor",
"author": null,
"author_email": "Nathaniel Dene Hoffman <dene@cmu.edu>",
"download_url": "https://files.pythonhosted.org/packages/67/09/37367a8acb4529467d19e2e3a8d7b0b2919b01638f58360a5a90d12aa1e6/modak-0.3.7.tar.gz",
"platform": null,
"description": "<!-- markdownlint-disable MD033 MD041 -->\n<p align=\"center\">\n <h1 align=\"center\">modak</h1>\n</p>\n<p align=\"center\">\n <img alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/denehoffman/modak?style=for-the-badge&logo=github\"></a>\n <a href=\"https://github.com/denehoffman/modak/commits/main/\" alt=\"Latest Commits\">\n <img alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/denehoffman/modak?style=for-the-badge&logo=github\"></a>\n <a href=\"LICENSE-APACHE\" alt=\"License\">\n <img alt=\"GitHub License\" src=\"https://img.shields.io/github/license/denehoffman/modak?style=for-the-badge\"></a>\n <a href=\"https://pypi.org/project/modak/\" alt=\"View project on PyPI\">\n <img alt=\"PyPI - Version\" src=\"https://img.shields.io/pypi/v/modak?style=for-the-badge&logo=python&logoColor=yellow&labelColor=blue\"></a>\n</p>\n\n`modak` is a simple-to-use, opinionated task queue system with dependency\nmanagement, resource allocation, and isolation control. Tasks are run\nrespecting topological dependencies, resource limits, and optional isolation.\n\nThis library only has two classes, `Task`s, which are an abstract class with a\nsingle method to override, `run(self) -> None`, and a `TaskQueue` which manages\nthe execution order. Additionally, `modak` comes with a task monitor TUI which\ncan be invoked with the `modak` shell command.\n\nThe `TaskQueue` has been written in Rust to get past issues with parallelism\nand the GIL. Instead of using a thread pool or even a multiprocessing pool,\nthe tasks are serialized into bytes and passed to the Rust-side manager, which\nhandles dispatching and execution. Each task is then run as a separate subprocess\nspawned in a Rust thread. This means the only way to share state between tasks is\nby writing to an output file and having a task depend on that file.\n\nBy default, `modak` scripts will create a state file called `.modak` in the\ncurrent working directory. This can be changed by setting it in the `TaskQueue`'s\ninitialization method. The `modak` CLI also supports an optional argument to\npoint to the location of the state file.\n\n## Features\n\n- Topological task scheduling\n- Persistent state and log files\n- Resource-aware execution\n- Isolated task handling\n- Skipping of previously completed tasks\n\n## Installation\n\n```shell\npip install modak\n```\n\nOr with `uv`:\n\n```shell\npip install modak\n```\n\n## FAQ\n\n> Q: What do you mean by \"opinionated\"?\n\nA: The library is meant to do one thing (and hopefully do it well): run tasks\nand write output files. Some users might want more flexibility, like writing\nto a database or having a target that isn't written to at all, but that is\nnot a goal of this library. If you need this level of control, try [`airflow`](https://airflow.apache.org/)\nor [`luigi`](https://github.com/spotify/luigi).\n\n> Q: Why make another task manager?\n\nA: [`luigi`](https://github.com/spotify/luigi) is nice, but I've been annoyed by\nthe poor type hints for task parameters. It's also very confusing for\nfirst-time users, and has a lot of features that I don't really think people\nuse unless they are working with products like Spotify. I built `modak` with\nresearch pipelines in mind, so I wanted something that was so simple to use,\nyou don't have to think too hard about what you're doing and can focus on\nthe data instead. I haven't used [airflow](https://airflow.apache.org/) much,\nbut it also seems like a tool intended for enterprise. My goal here is\nsimplicity and a minimal learning curve. There are only two classes. `luigi`\nhas the added annoyance of running a web server to visualize the state of the\nDAG, which is very tricky to use on a remote server if you don't have the\nproper permissions.\n\n> Q: Isn't Rust a bit overkill?\n\nA: Rust isn't as scary as it sounds. I don't actually care much about memory\nsafety (although I'll take it for free), I like the development experience.\n\n> Q: Any sharp corners?\n\nA: In development, I've found that libraries that do something when imported\nneed to be handled with care. Such libraries should be imported inside the\n`run` method of the task. This is because the task gets serialized and sent\nto the `__main__` module, but the imports from your code are run before\nserialization. An example of this is the `loguru` library, which sets\nup the global logger [on import](https://github.com/Delgan/loguru/blob/a69bfc451413f71b81761a238db4b5833cf0a992/loguru/__init__.py#L18).\nIf `loguru` is only imported outside the task, the `logger` instance will have\nno sink added because [these lines](https://github.com/Delgan/loguru/blob/a69bfc451413f71b81761a238db4b5833cf0a992/loguru/__init__.py#L31-L32)\nwill not be run when the task is deserialized. This will not effect most code,\nit's just something to be aware of.\n\n## Examples\n\n### A simple chain of tasks\n\n```python\nfrom modak import Task, TaskQueue\n\nclass PrintTask(Task):\n def run(self):\n self.logger.info(f\"Running {self.name}\")\n\nt1 = PrintTask(name=\"task1\")\nt2 = PrintTask(name=\"task2\", inputs=[t1])\nt3 = PrintTask(name=\"task3\", inputs=[t2])\n\nqueue = TaskQueue('example1')\nqueue.run([t3])\n```\n\n### Fan-in, fan-out\n\n```python\nfrom pathlib import Path\nfrom modak import Task, TaskQueue\n\nclass DummyTask(Task):\n def run(self):\n self.logger.info(f\"Running {self.name}\")\n for output in self.outputs:\n output.write_text(f\"Output of {self.name}\")\n\n# Leaf tasks\na = DummyTask(name=\"A\", outputs=[Path(\"a.out\")])\nb = DummyTask(name=\"B\", outputs=[Path(\"b.out\")])\nc = DummyTask(name=\"C\", outputs=[Path(\"c.out\")])\n\n# Fan-in: D depends on A, B, C\nd = DummyTask(name=\"D\", inputs=[a, b, c], outputs=[Path(\"d.out\")])\n\n# Fan-out: E and F both depend on D\ne = DummyTask(name=\"E\", inputs=[d], outputs=[Path(\"e.out\")])\nf = DummyTask(name=\"F\", inputs=[d], outputs=[Path(\"f.out\")])\n\nqueue = TaskQueue('example2')\nqueue.run([e, f])\n\n```\n\n### A complex workflow\n\n```python\nfrom pathlib import Path\nfrom modak import Task, TaskQueue\n\nclass SimTask(Task):\n def run(self):\n self.logger.info(f\"{self.name} starting with {self.resources}\")\n for out in self.outputs:\n out.write_text(f\"Generated by {self.name}\")\n\n# Raw data preprocessing\npre_a = SimTask(name=\"PreA\", outputs=[Path(\"a.pre\")], resources={\"cpu\": 1})\npre_b = SimTask(name=\"PreB\", outputs=[Path(\"b.pre\")], resources={\"cpu\": 1})\npre_c = SimTask(name=\"PreC\", outputs=[Path(\"c.pre\")], resources={\"cpu\": 1})\n\n# Feature extraction (can run in parallel)\nfeat1 = SimTask(name=\"Feature1\", inputs=[pre_a], outputs=[Path(\"a.feat\")], resources={\"cpu\": 2})\nfeat2 = SimTask(name=\"Feature2\", inputs=[pre_b], outputs=[Path(\"b.feat\")], resources={\"cpu\": 2})\nfeat3 = SimTask(name=\"Feature3\", inputs=[pre_c], outputs=[Path(\"c.feat\")], resources={\"cpu\": 2})\n\n# Aggregation step\naggregate = SimTask(\n name=\"Aggregate\",\n inputs=[feat1, feat2, feat3],\n outputs=[Path(\"agg.out\")],\n resources={\"cpu\": 3}\n)\n\n# Final model training (expensive, must be isolated)\ntrain = SimTask(\n name=\"TrainModel\",\n inputs=[aggregate],\n outputs=[Path(\"model.bin\")],\n isolated=True,\n resources={\"cpu\": 3, \"gpu\": 1}\n)\n\n# Side analysis and visualization can run independently\nviz = SimTask(name=\"Visualization\", inputs=[feat1, feat2], outputs=[Path(\"viz.png\")], resources={\"cpu\": 1})\nstats = SimTask(name=\"Stats\", inputs=[feat3], outputs=[Path(\"stats.txt\")], resources={\"cpu\": 1})\n\nqueue = TaskQueue(\n 'example3',\n workers=4,\n resources={\"cpu\": 4, \"gpu\": 1}\n)\n\nqueue.run([train, viz, stats])\n\n```\n\n## Future Plans\n\nI'll probably make small improvements to the TUI and add features as I find the\nneed. Contributions are welcome, just open an issue or pull request on GitHub\nand I'll try to respond as soon as I can.\n\n",
"bugtrack_url": null,
"license": "MIT OR Apache-2.0",
"summary": "A simple, opinionated task manager",
"version": "0.3.7",
"project_urls": {
"Homepage": "https://github.com/denehoffman/modak",
"Issues": "https://github.com/denehoffman/modak/issues",
"Repository": "https://github.com/denehoffman/modak"
},
"split_keywords": [
"task",
" job",
" scheduler",
" monitor"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "79c6b7f0c4b3637b371a3815580006fae6118e85fbf2ef9228c8b3ccbde369c9",
"md5": "961cfe1a05789b9c50d76c0db42d34cb",
"sha256": "8d915ca6384c6eabd5feaccad8a2119583476753fe3faa2540f06cfb4b84e26f"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "961cfe1a05789b9c50d76c0db42d34cb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1665158,
"upload_time": "2025-07-17T13:29:57",
"upload_time_iso_8601": "2025-07-17T13:29:57.722062Z",
"url": "https://files.pythonhosted.org/packages/79/c6/b7f0c4b3637b371a3815580006fae6118e85fbf2ef9228c8b3ccbde369c9/modak-0.3.7-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4762275a7eb86a68a1b0175d5191ae465b341f3c103791365d219bed81563247",
"md5": "c0be7a1e2c4197d078cc5a7ed79c14f3",
"sha256": "1ca42b548da76382ddaa6a51cf22081b5edfb26526db1089ff9b2c85b99f61f4"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c0be7a1e2c4197d078cc5a7ed79c14f3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1563937,
"upload_time": "2025-07-17T13:29:54",
"upload_time_iso_8601": "2025-07-17T13:29:54.577593Z",
"url": "https://files.pythonhosted.org/packages/47/62/275a7eb86a68a1b0175d5191ae465b341f3c103791365d219bed81563247/modak-0.3.7-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a0c256c0a0c345ce62e8c8c617a0aa6eb98fef38192da3535b77b02e39cd528a",
"md5": "a573422ee2256f5dd9e090e9678550f2",
"sha256": "ce2b735ab5a6288afd2dabaadbdcfd6b0ac51aea7f05df3e8581596cc9040c3a"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "a573422ee2256f5dd9e090e9678550f2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1601349,
"upload_time": "2025-07-17T13:29:22",
"upload_time_iso_8601": "2025-07-17T13:29:22.311707Z",
"url": "https://files.pythonhosted.org/packages/a0/c2/56c0a0c345ce62e8c8c617a0aa6eb98fef38192da3535b77b02e39cd528a/modak-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7ff23a2d6cdbbe7cc9f2ea336a814de4bb395b571fa4db044e193062e71676e9",
"md5": "5bb744d24fd69b68ffccde0c8adba672",
"sha256": "b91f23e55272d276896855aaa28cbae376bc628f714421c7cde4ac0834710c80"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "5bb744d24fd69b68ffccde0c8adba672",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1582506,
"upload_time": "2025-07-17T13:29:28",
"upload_time_iso_8601": "2025-07-17T13:29:28.348888Z",
"url": "https://files.pythonhosted.org/packages/7f/f2/3a2d6cdbbe7cc9f2ea336a814de4bb395b571fa4db044e193062e71676e9/modak-0.3.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bd970c7df0fcb2d7d461ab49fcc2073efce55cdff490fa71b9a8eec9c5b9a788",
"md5": "ccbf3a7607ec1e53bb98a352379b3b74",
"sha256": "d7288eecaea3c03d14d047d02171a2e68e3a1940d7b1517fe3286aafd13ab649"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "ccbf3a7607ec1e53bb98a352379b3b74",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1895411,
"upload_time": "2025-07-17T13:29:44",
"upload_time_iso_8601": "2025-07-17T13:29:44.429018Z",
"url": "https://files.pythonhosted.org/packages/bd/97/0c7df0fcb2d7d461ab49fcc2073efce55cdff490fa71b9a8eec9c5b9a788/modak-0.3.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "61dac844532b4e2dac3927a7439692cdf1b6e03cb328eee25fdebe79a785ccaa",
"md5": "b748e0eead5ead2d212fbb40c1d090f7",
"sha256": "3c1c2dd7a75cc3c198931c6e66213e8d543f1a5bcaf1197a8375dc181bad7868"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "b748e0eead5ead2d212fbb40c1d090f7",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1916291,
"upload_time": "2025-07-17T13:29:34",
"upload_time_iso_8601": "2025-07-17T13:29:34.022337Z",
"url": "https://files.pythonhosted.org/packages/61/da/c844532b4e2dac3927a7439692cdf1b6e03cb328eee25fdebe79a785ccaa/modak-0.3.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2fab561f45bfc6dbecf0ad3457941ed9fd033735e2195d78f1781c62c796f2d0",
"md5": "51d8de2f57d2d7f30951002e1f9e7698",
"sha256": "a96e8a7b2f53b2b0f401931ab1a9c434b7dbdcc9e1fccb548d16d6ad22aff44f"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "51d8de2f57d2d7f30951002e1f9e7698",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1824161,
"upload_time": "2025-07-17T13:29:39",
"upload_time_iso_8601": "2025-07-17T13:29:39.292519Z",
"url": "https://files.pythonhosted.org/packages/2f/ab/561f45bfc6dbecf0ad3457941ed9fd033735e2195d78f1781c62c796f2d0/modak-0.3.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "71acbd846adfff6a9d027c948a002a7cb18eb39f01b2c637cf5149ab86d620e3",
"md5": "6cad6c146adb53303497caa20a205b8a",
"sha256": "666a9e5ec3eb39acbcf5d7082ea9ad586a2de5b6ca22086aecadc3cc4992f711"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6cad6c146adb53303497caa20a205b8a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1749067,
"upload_time": "2025-07-17T13:29:49",
"upload_time_iso_8601": "2025-07-17T13:29:49.759029Z",
"url": "https://files.pythonhosted.org/packages/71/ac/bd846adfff6a9d027c948a002a7cb18eb39f01b2c637cf5149ab86d620e3/modak-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c162df05df619031a95e31a020d397353c86f9eb8982429f17f59581d3930b74",
"md5": "2dea20cdf58881c278097edcc04cc90f",
"sha256": "ec4f65c411098d6ed8d198239534c70913f388a839b785da48f944de6c150208"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "2dea20cdf58881c278097edcc04cc90f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1889009,
"upload_time": "2025-07-17T13:30:01",
"upload_time_iso_8601": "2025-07-17T13:30:01.121726Z",
"url": "https://files.pythonhosted.org/packages/c1/62/df05df619031a95e31a020d397353c86f9eb8982429f17f59581d3930b74/modak-0.3.7-cp312-cp312-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0a43e003cbb8b3bbebf156405219392753f5c9e927dcef1ad63bfbf68efe1050",
"md5": "61008accdef327e4e734d345f5b2f996",
"sha256": "ba9555126278e680efeb12309263727731dccee78441b740abbd0811b6e92e89"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "61008accdef327e4e734d345f5b2f996",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1951439,
"upload_time": "2025-07-17T13:30:06",
"upload_time_iso_8601": "2025-07-17T13:30:06.644689Z",
"url": "https://files.pythonhosted.org/packages/0a/43/e003cbb8b3bbebf156405219392753f5c9e927dcef1ad63bfbf68efe1050/modak-0.3.7-cp312-cp312-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a0048a622b77b5c50cffa67bfd20f5ff20e9e7c3cf1e7a16f18a10eba5e80035",
"md5": "758b7887726a8a82b8688b3d35b283bb",
"sha256": "a17ec8bba6471cf5c76d52d35554e9fd05b72060819e446011b52a9a568f47e8"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "758b7887726a8a82b8688b3d35b283bb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 2046361,
"upload_time": "2025-07-17T13:30:11",
"upload_time_iso_8601": "2025-07-17T13:30:11.614771Z",
"url": "https://files.pythonhosted.org/packages/a0/04/8a622b77b5c50cffa67bfd20f5ff20e9e7c3cf1e7a16f18a10eba5e80035/modak-0.3.7-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "05c5a5e64fa123a39a816801392ff393a71439bcc70124b0085b58f15cef6197",
"md5": "ab02b2a110d9fdfa5c3f3dfa2e163b2a",
"sha256": "fbe47cfac20c1430db6cc5910ce9f7f10fcdb4c175b4667dbeff842eb8b8d4f0"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "ab02b2a110d9fdfa5c3f3dfa2e163b2a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1926538,
"upload_time": "2025-07-17T13:30:17",
"upload_time_iso_8601": "2025-07-17T13:30:17.839247Z",
"url": "https://files.pythonhosted.org/packages/05/c5/a5e64fa123a39a816801392ff393a71439bcc70124b0085b58f15cef6197/modak-0.3.7-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1fb8b843bc2b42451ea9584291fd765d9cad60963a38f5692cb61679cca1c363",
"md5": "a4c09564983f5534f0e37f2dda651756",
"sha256": "2d1cd4e651c2b6feb875bf59e1f33222e6d9936f43a286e6d0457c562f6543f7"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "a4c09564983f5534f0e37f2dda651756",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1261880,
"upload_time": "2025-07-17T13:30:27",
"upload_time_iso_8601": "2025-07-17T13:30:27.992415Z",
"url": "https://files.pythonhosted.org/packages/1f/b8/b843bc2b42451ea9584291fd765d9cad60963a38f5692cb61679cca1c363/modak-0.3.7-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1e54fd8998a3d3703d633a0d92b7de81642f0053911ff26da59941f211a24607",
"md5": "5511dec1b901b71a38e6fa92a24521aa",
"sha256": "942f6bc300836061630ceae0cb21d6d1897c7b9b2435d28452167d85cea79922"
},
"downloads": -1,
"filename": "modak-0.3.7-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "5511dec1b901b71a38e6fa92a24521aa",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12",
"size": 1448135,
"upload_time": "2025-07-17T13:30:24",
"upload_time_iso_8601": "2025-07-17T13:30:24.550797Z",
"url": "https://files.pythonhosted.org/packages/1e/54/fd8998a3d3703d633a0d92b7de81642f0053911ff26da59941f211a24607/modak-0.3.7-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "406ab42a9a9941a57b03df34b7affbd1bfde9b6b6f919202309613372f7be2ac",
"md5": "842f5ba70ca25c7b65f0283e27c76581",
"sha256": "c2e97b40c4476fb1d9204cd784e97110fca2d269ec11a1593045a10ec856019f"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "842f5ba70ca25c7b65f0283e27c76581",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1664704,
"upload_time": "2025-07-17T13:29:59",
"upload_time_iso_8601": "2025-07-17T13:29:59.553123Z",
"url": "https://files.pythonhosted.org/packages/40/6a/b42a9a9941a57b03df34b7affbd1bfde9b6b6f919202309613372f7be2ac/modak-0.3.7-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b4cc5ee7be6fbf0272f733941ab9bce45a27dda2ed8dd7e2529e26c8817c8903",
"md5": "6850fbb344a60ee7669c2b14531bf122",
"sha256": "063608461f26358f5fcff4a65ecc59da8845d161a8bafd4fa06636bb96262a9a"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6850fbb344a60ee7669c2b14531bf122",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1563306,
"upload_time": "2025-07-17T13:29:56",
"upload_time_iso_8601": "2025-07-17T13:29:56.107174Z",
"url": "https://files.pythonhosted.org/packages/b4/cc/5ee7be6fbf0272f733941ab9bce45a27dda2ed8dd7e2529e26c8817c8903/modak-0.3.7-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5f87a5c7ba9eccff9abb718be0e6513d9f4ef2de6971e128bf9ba1ce9eb3c463",
"md5": "944e5c67af2bc03339ab3760885b00d2",
"sha256": "f200585add363fef6842753c65b126aa43053a132fa46ea310c433564af5a0ca"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "944e5c67af2bc03339ab3760885b00d2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1600520,
"upload_time": "2025-07-17T13:29:24",
"upload_time_iso_8601": "2025-07-17T13:29:24.602813Z",
"url": "https://files.pythonhosted.org/packages/5f/87/a5c7ba9eccff9abb718be0e6513d9f4ef2de6971e128bf9ba1ce9eb3c463/modak-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "36f6d73b8f78d69f810478be286d9cb56904deeccd235bb87daf37be6ea5ddc8",
"md5": "68f747404fe532761aab08ccd4009ca8",
"sha256": "6ee304ac3b409c2f2f9ad582506ce78c040b0de3f0cf7079b7d0953db82c31db"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "68f747404fe532761aab08ccd4009ca8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1582088,
"upload_time": "2025-07-17T13:29:30",
"upload_time_iso_8601": "2025-07-17T13:29:30.206212Z",
"url": "https://files.pythonhosted.org/packages/36/f6/d73b8f78d69f810478be286d9cb56904deeccd235bb87daf37be6ea5ddc8/modak-0.3.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "df9cee93588846b2bfe3344f4b10bec5f26e63aab1eba935547e9ead5d22f3b5",
"md5": "3fc3e5089e8f33c279ad2bdd9319a4d6",
"sha256": "0df130ee5a0c1a471db6338532077c1a2b96e7ac9d491e9786c74e297c344137"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "3fc3e5089e8f33c279ad2bdd9319a4d6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1894159,
"upload_time": "2025-07-17T13:29:46",
"upload_time_iso_8601": "2025-07-17T13:29:46.306018Z",
"url": "https://files.pythonhosted.org/packages/df/9c/ee93588846b2bfe3344f4b10bec5f26e63aab1eba935547e9ead5d22f3b5/modak-0.3.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d561e26265ebb23d8fc2836da809f3187f673d56b1b32cf9d1c8c41bb421793d",
"md5": "47e2b95ee2f3c4da35757ca2aebb5397",
"sha256": "1ab240dfc50a3692a6c83be0084cd8bad64403ce4312cac36d4e98e5b9cfb850"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "47e2b95ee2f3c4da35757ca2aebb5397",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1915450,
"upload_time": "2025-07-17T13:29:36",
"upload_time_iso_8601": "2025-07-17T13:29:36.015643Z",
"url": "https://files.pythonhosted.org/packages/d5/61/e26265ebb23d8fc2836da809f3187f673d56b1b32cf9d1c8c41bb421793d/modak-0.3.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa48e29f096f2933c55393a4dea130d51955533e20f07c3994a91d0f17a6dc20",
"md5": "b5ab89ef214c1f79fd8e4e0cfd4d3110",
"sha256": "f8effddfff15b78f0b5f83e063aad6c9969b3d3c5dc4e1df3b5bda34c86c4f34"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "b5ab89ef214c1f79fd8e4e0cfd4d3110",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1824466,
"upload_time": "2025-07-17T13:29:40",
"upload_time_iso_8601": "2025-07-17T13:29:40.966822Z",
"url": "https://files.pythonhosted.org/packages/fa/48/e29f096f2933c55393a4dea130d51955533e20f07c3994a91d0f17a6dc20/modak-0.3.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bdf7f05a50e3ce8c25a9525198833eab31a66d8e9567ab0d9cc94deae0ee4320",
"md5": "f720eccc1dde1ef9c6dc1c80a5359dbe",
"sha256": "d02df800c56335d78ba89e6f7fffe1c900b75eb76c3750988dc3d1d8a72ab25b"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f720eccc1dde1ef9c6dc1c80a5359dbe",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1748817,
"upload_time": "2025-07-17T13:29:51",
"upload_time_iso_8601": "2025-07-17T13:29:51.334870Z",
"url": "https://files.pythonhosted.org/packages/bd/f7/f05a50e3ce8c25a9525198833eab31a66d8e9567ab0d9cc94deae0ee4320/modak-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "73383b2f7dc27bf531a56dd45945a92682494c8ec751dcf75f0c94a01e36ba0a",
"md5": "dee9365169c81a96bd513552c53807a8",
"sha256": "e7687ae675cdde1b71c0ce29594366a300026ee698fd5d7e4ecd313d6098a1c9"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "dee9365169c81a96bd513552c53807a8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1888528,
"upload_time": "2025-07-17T13:30:02",
"upload_time_iso_8601": "2025-07-17T13:30:02.893208Z",
"url": "https://files.pythonhosted.org/packages/73/38/3b2f7dc27bf531a56dd45945a92682494c8ec751dcf75f0c94a01e36ba0a/modak-0.3.7-cp313-cp313-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "833657898f8ea3325d8b17d936c6ecdc4d31542fd532e7dd4bc537c3c3a3291d",
"md5": "f354befd39465c7a66c6c32a0e36f963",
"sha256": "081e852deee6aca012ab3bc65d2e80b853e401e77954fb7ea7f66ca0e6e0fd87"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "f354befd39465c7a66c6c32a0e36f963",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1950996,
"upload_time": "2025-07-17T13:30:08",
"upload_time_iso_8601": "2025-07-17T13:30:08.248666Z",
"url": "https://files.pythonhosted.org/packages/83/36/57898f8ea3325d8b17d936c6ecdc4d31542fd532e7dd4bc537c3c3a3291d/modak-0.3.7-cp313-cp313-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "892c3e62d15030826b2b67acd414d332dc11a7e00598add36a648aab050d8939",
"md5": "5a4df3f2babf654da07ab6d9bbe64851",
"sha256": "dcce886e81186bbc86f7888e03829f71374964fa72a33382a252a7244df2421f"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "5a4df3f2babf654da07ab6d9bbe64851",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 2045350,
"upload_time": "2025-07-17T13:30:13",
"upload_time_iso_8601": "2025-07-17T13:30:13.160009Z",
"url": "https://files.pythonhosted.org/packages/89/2c/3e62d15030826b2b67acd414d332dc11a7e00598add36a648aab050d8939/modak-0.3.7-cp313-cp313-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "182b3b012550502f59f36c10f5a6c4ecb9cabf18b41d912ce0d6d150c7518188",
"md5": "ee70b9565fa29751f4903aed2fe0bed7",
"sha256": "9f47c04531eec711c3b2b5cc158e41f032793f4f96243efd395d3486dc706f03"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "ee70b9565fa29751f4903aed2fe0bed7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1925822,
"upload_time": "2025-07-17T13:30:19",
"upload_time_iso_8601": "2025-07-17T13:30:19.433125Z",
"url": "https://files.pythonhosted.org/packages/18/2b/3b012550502f59f36c10f5a6c4ecb9cabf18b41d912ce0d6d150c7518188/modak-0.3.7-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a9d8d1951981c8035562947c7587e5e7fbe09ca4e03ba13a80865721b7c9a5a4",
"md5": "6dea3fe2baa2e36b7d15ccdf61a75f0a",
"sha256": "51d9c07240e399cdebc6bfd06e24df2fbcf56d851972ba5b61f8e6f954722ac0"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "6dea3fe2baa2e36b7d15ccdf61a75f0a",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1601052,
"upload_time": "2025-07-17T13:29:26",
"upload_time_iso_8601": "2025-07-17T13:29:26.685417Z",
"url": "https://files.pythonhosted.org/packages/a9/d8/d1951981c8035562947c7587e5e7fbe09ca4e03ba13a80865721b7c9a5a4/modak-0.3.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e096c5f1ead505b1bd12f682d19dd8f5f23ab4bd9c6170f4cee6a45c42fe526c",
"md5": "eec26583f03a8ade7e4ae9a550bb00d4",
"sha256": "c553a333c4788cf5ef188a7f146a50fec104b7896d8726a0c3ca093c5e7125a2"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "eec26583f03a8ade7e4ae9a550bb00d4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1580612,
"upload_time": "2025-07-17T13:29:32",
"upload_time_iso_8601": "2025-07-17T13:29:32.334579Z",
"url": "https://files.pythonhosted.org/packages/e0/96/c5f1ead505b1bd12f682d19dd8f5f23ab4bd9c6170f4cee6a45c42fe526c/modak-0.3.7-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a5257b921438fc6fef5c56be5990141b1f2dc29e24695955d71c6c7fa4915683",
"md5": "6a55416e37034e31c01397e4dbea5773",
"sha256": "85a9ff76724767a22af1ff5621857d9efc4e0309c006a3c17128abe29b460960"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "6a55416e37034e31c01397e4dbea5773",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1914976,
"upload_time": "2025-07-17T13:29:37",
"upload_time_iso_8601": "2025-07-17T13:29:37.640362Z",
"url": "https://files.pythonhosted.org/packages/a5/25/7b921438fc6fef5c56be5990141b1f2dc29e24695955d71c6c7fa4915683/modak-0.3.7-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7cf3a020eeb7aac51552ada79865d1eb2e9be0a74eab46529f61efb51de5dca0",
"md5": "88b8a0a69799932f37ea7b1da2bd4c72",
"sha256": "f83bb943041f078adbfcb55fcac4c47f1cb729cc4bdc8d5cf317caa8528efd85"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "88b8a0a69799932f37ea7b1da2bd4c72",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1825209,
"upload_time": "2025-07-17T13:29:42",
"upload_time_iso_8601": "2025-07-17T13:29:42.584679Z",
"url": "https://files.pythonhosted.org/packages/7c/f3/a020eeb7aac51552ada79865d1eb2e9be0a74eab46529f61efb51de5dca0/modak-0.3.7-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f389d5f3952746e59f29afb40ff8895e0e446f91193f05c63b9e8645fe471ce3",
"md5": "b47964cfa5a7788be502e6f590061bbc",
"sha256": "7f11095c75bb7f540597136bc068bf7ed07afb7e07384f6f78e0e92c5596bcfa"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "b47964cfa5a7788be502e6f590061bbc",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1888527,
"upload_time": "2025-07-17T13:30:04",
"upload_time_iso_8601": "2025-07-17T13:30:04.591076Z",
"url": "https://files.pythonhosted.org/packages/f3/89/d5f3952746e59f29afb40ff8895e0e446f91193f05c63b9e8645fe471ce3/modak-0.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "86a508e513d8b7c205e9dffcc79eee287192a7291be20acccaaf677edc492aa6",
"md5": "5e713a23a931198e8c3bfca87c535374",
"sha256": "1686135aaea2db144eb30780569c50e705f691fd3a1ba2d4bcbf3902dce07ce8"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "5e713a23a931198e8c3bfca87c535374",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1949680,
"upload_time": "2025-07-17T13:30:09",
"upload_time_iso_8601": "2025-07-17T13:30:09.868397Z",
"url": "https://files.pythonhosted.org/packages/86/a5/08e513d8b7c205e9dffcc79eee287192a7291be20acccaaf677edc492aa6/modak-0.3.7-cp313-cp313t-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9c7ceac8fea2df8b7ff426b41fee6012cedbac669eab1aa9a69d724a24f0289f",
"md5": "14d629694d9903b8bfd499645f4b15bb",
"sha256": "61a1e0a72e5ae02efee9e325ee4f6edfc981679d0b4b8579d3a82441d2132d7e"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "14d629694d9903b8bfd499645f4b15bb",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 2043026,
"upload_time": "2025-07-17T13:30:15",
"upload_time_iso_8601": "2025-07-17T13:30:15.877201Z",
"url": "https://files.pythonhosted.org/packages/9c/7c/eac8fea2df8b7ff426b41fee6012cedbac669eab1aa9a69d724a24f0289f/modak-0.3.7-cp313-cp313t-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b333c586fe7a60166388e3ebe60bbb97ec0f64d3ac7848387036eb4309fe6c0b",
"md5": "5a82238d80175299fae03672ad4dea4c",
"sha256": "df95b6719d5020d1ad72f66add4f75826d921b3d49970563ae086d86c9c73180"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "5a82238d80175299fae03672ad4dea4c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1927047,
"upload_time": "2025-07-17T13:30:20",
"upload_time_iso_8601": "2025-07-17T13:30:20.992641Z",
"url": "https://files.pythonhosted.org/packages/b3/33/c586fe7a60166388e3ebe60bbb97ec0f64d3ac7848387036eb4309fe6c0b/modak-0.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e4bcba8dd9c52078cc3904c6a707901b3915bfde1eccc2854fa83ba0eeea0730",
"md5": "25551bc401ab4520b700b5b27965862a",
"sha256": "c0eba896adf5ad18209c94766defa4a092f237bf03bafbb20e28d79dc4a5fced"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "25551bc401ab4520b700b5b27965862a",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1261634,
"upload_time": "2025-07-17T13:30:29",
"upload_time_iso_8601": "2025-07-17T13:30:29.553074Z",
"url": "https://files.pythonhosted.org/packages/e4/bc/ba8dd9c52078cc3904c6a707901b3915bfde1eccc2854fa83ba0eeea0730/modak-0.3.7-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ae7d6626c74220aadd8f823586cb38215a504c2a6e0f7aae1eb972dd14fb8a6",
"md5": "394a1330c7f9996a2fddc3016732f5d4",
"sha256": "807203c685dcdc58013a697ee8f65b31f305ddead9c1d0776d7ac3c180404aac"
},
"downloads": -1,
"filename": "modak-0.3.7-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "394a1330c7f9996a2fddc3016732f5d4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12",
"size": 1447529,
"upload_time": "2025-07-17T13:30:26",
"upload_time_iso_8601": "2025-07-17T13:30:26.388451Z",
"url": "https://files.pythonhosted.org/packages/9a/e7/d6626c74220aadd8f823586cb38215a504c2a6e0f7aae1eb972dd14fb8a6/modak-0.3.7-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7638e51ec1646fc6a90e97e08b63cb34d93a0e58d6e67b557ec13b4cf9087e97",
"md5": "5ab73627fedf5011b8e5deb4559a0a90",
"sha256": "3f10ba8180ca0f009e8059d87ec8f3662995f3efd999c1a1afe4f0007c7e8deb"
},
"downloads": -1,
"filename": "modak-0.3.7-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "5ab73627fedf5011b8e5deb4559a0a90",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.12",
"size": 1894322,
"upload_time": "2025-07-17T13:29:47",
"upload_time_iso_8601": "2025-07-17T13:29:47.969867Z",
"url": "https://files.pythonhosted.org/packages/76/38/e51ec1646fc6a90e97e08b63cb34d93a0e58d6e67b557ec13b4cf9087e97/modak-0.3.7-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e4a3d039fe57821c8f43f382d721cb29dc49e99e963d883b8ddd3878c17b40a0",
"md5": "40683d2d1101a10032162d68735ab313",
"sha256": "c10a19a9545fc28c759d7dcd017adefa7001a86c1f5dbd942842256fc5af5dd7"
},
"downloads": -1,
"filename": "modak-0.3.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "40683d2d1101a10032162d68735ab313",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.12",
"size": 1749726,
"upload_time": "2025-07-17T13:29:52",
"upload_time_iso_8601": "2025-07-17T13:29:52.989141Z",
"url": "https://files.pythonhosted.org/packages/e4/a3/d039fe57821c8f43f382d721cb29dc49e99e963d883b8ddd3878c17b40a0/modak-0.3.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "670937367a8acb4529467d19e2e3a8d7b0b2919b01638f58360a5a90d12aa1e6",
"md5": "7a9a11ea6e3163f43bfeb41c11195d2e",
"sha256": "8a7f5a36ed5883ccf78a3a212ebc981dd767d653e98607639336299767e9b72f"
},
"downloads": -1,
"filename": "modak-0.3.7.tar.gz",
"has_sig": false,
"md5_digest": "7a9a11ea6e3163f43bfeb41c11195d2e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 46106,
"upload_time": "2025-07-17T13:30:23",
"upload_time_iso_8601": "2025-07-17T13:30:23.048933Z",
"url": "https://files.pythonhosted.org/packages/67/09/37367a8acb4529467d19e2e3a8d7b0b2919b01638f58360a5a90d12aa1e6/modak-0.3.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-17 13:30:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "denehoffman",
"github_project": "modak",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "modak"
}