# PyOptEx
| | |
| --- | --- |
| Package | [](https://pypi.org/project/pyoptex/) [](https://pypi.org/project/pyoptex/) |
| Meta | [](https://github.com/mborn1/pyoptex/blob/main/LICENSE) [](https://pyoptex.readthedocs.io/en/latest/) |
PyOptEx (or Python Optimal Experiments) is a package designed to create optimal design of experiments with Python. It is fully open source and can be used for any purpose.
The package is designed for both engineers, and design of experiment researchers. Engineers can use the precreated functions to generate designs for their problems,
especially the cost-optimal algorithms. Researchers can easily develop new metrics (criteria) and test them.
To generate experimental designs, there are two main options:
* **Fixed structure**: These designs have a fixed number of runs and fixed randomization
structure, known upfront. Well-known designs include split-plot, strip-plot, and
regular staggered-level designs. A specialization is also included for splitk-plot
designs using the update formulas as described in
[Born and Goos (2025)](https://www.sciencedirect.com/science/article/pii/S0167947324001129).
* **Cost-optimal designs**: These design generation algorithms follow a new
DoE philosophy.
Instead of fixing the number of runs and randomization structure, the algorithm
optimizes directly based on the underlying resource constraints. The user must only
specify a budget and a function which computes the resource consumption of a design.
Go to Creating a cost-optimal design for an example. The currently implemented
algorithm is CODEX.
## Main features
* The **first complete Python package for optimal design of experiments**. Model
[everything](https://pyoptex.readthedocs.io/en/latest/_docs/doe/example_scenarios.html#example-scenarios) including continuous factors, categorical factors,
mixtures, blocked experiments, split-plot experiments, staggered-level experiments.
* **Intuitive design of experiments** with
[cost-optimal designs](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-cost)
for everyone. No longer requires expert statistical knowledge before creating
experiments.
* Accounts for **any constraint** you require. Not only can you choose
the randomization structure
[manually](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-other-fixed),
or let the
[cost-optimal](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-cost)
design algorithms figure it out automatically, you can also specify the physically
possible factor combinations for a run.
* **Augmenting** designs was never easier. Simply read your initial design
to a pandas dataframe and augment it by passing it as a
[prior](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-augment).
* **Customize** any part of the algorithm, including the
[optimization criteria](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-metric) (metrics),
[linear model](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-model),
[encoding of the categorical factors](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-cat-encoding),
and much more.
* Directly optimize for **Bayesian**
[a-priori variance ratios](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-bayesian-ratio)
in designs with hard-to-change factors.
* High-performance **model selection** using
[SAMS](https://pyoptex.readthedocs.io/en/latest/_docs/analysis/customization.html#a-cust-sams)
(simulated annealing model selection)
[(Wolters and Bingham, 2012)](https://www.tandfonline.com/doi/abs/10.1198/TECH.2011.08157).
## Getting started
Install this package using pip
```
pip install pyoptex
```
## Documentation
The documentation for this package can be found at [here](https://pyoptex.readthedocs.io/en/latest/)
## Create your first design
See the documentation on [Your first design](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html)
## Analyze your first dataset
See the documentation on [Your first dataset](https://pyoptex.readthedocs.io/en/latest/_docs/analysis/quickstart.html)
## License
BSD-3 clause, meaning you can use and alter it for any purpose,
open-source or commercial!
However, any open-source contributions to this project are much
appreciated by the community.
## Contributing
Any ideas, bugs and features requests can be added as an [issue](https://github.com/mborn1/pyoptex/issues). Any direct code contributions can be added via pull requests.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyoptex",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "python, flexible, accessible, data-analysis, design-of-experiments, pyoptex, innovation, cost-optimization",
"author": null,
"author_email": "Mathias Born <mathiasborn2@gmail.com>",
"download_url": null,
"platform": null,
"description": "# PyOptEx\n\n| | |\n| --- | --- |\n| Package | [](https://pypi.org/project/pyoptex/) [](https://pypi.org/project/pyoptex/) |\n| Meta | [](https://github.com/mborn1/pyoptex/blob/main/LICENSE) [](https://pyoptex.readthedocs.io/en/latest/) |\n\n\nPyOptEx (or Python Optimal Experiments) is a package designed to create optimal design of experiments with Python. It is fully open source and can be used for any purpose.\n\nThe package is designed for both engineers, and design of experiment researchers. Engineers can use the precreated functions to generate designs for their problems,\nespecially the cost-optimal algorithms. Researchers can easily develop new metrics (criteria) and test them.\n\nTo generate experimental designs, there are two main options:\n\n* **Fixed structure**: These designs have a fixed number of runs and fixed randomization\n structure, known upfront. Well-known designs include split-plot, strip-plot, and \n regular staggered-level designs. A specialization is also included for splitk-plot\n designs using the update formulas as described in \n [Born and Goos (2025)](https://www.sciencedirect.com/science/article/pii/S0167947324001129).\n\n* **Cost-optimal designs**: These design generation algorithms follow a new \n DoE philosophy. \n Instead of fixing the number of runs and randomization structure, the algorithm \n optimizes directly based on the underlying resource constraints. The user must only \n specify a budget and a function which computes the resource consumption of a design. \n Go to Creating a cost-optimal design for an example. The currently implemented \n algorithm is CODEX.\n\n## Main features\n\n* The **first complete Python package for optimal design of experiments**. Model\n [everything](https://pyoptex.readthedocs.io/en/latest/_docs/doe/example_scenarios.html#example-scenarios) including continuous factors, categorical factors, \n mixtures, blocked experiments, split-plot experiments, staggered-level experiments.\n\n* **Intuitive design of experiments** with \n [cost-optimal designs](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-cost) \n for everyone. No longer requires expert statistical knowledge before creating\n experiments.\n\n* Accounts for **any constraint** you require. Not only can you choose \n the randomization structure \n [manually](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-other-fixed), \n or let the \n [cost-optimal](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html#qc-cost) \n design algorithms figure it out automatically, you can also specify the physically \n possible factor combinations for a run.\n\n* **Augmenting** designs was never easier. Simply read your initial design \n to a pandas dataframe and augment it by passing it as a \n [prior](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-augment).\n\n* **Customize** any part of the algorithm, including the \n [optimization criteria](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-metric) (metrics), \n [linear model](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-model), \n [encoding of the categorical factors](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-cat-encoding), \n and much more.\n\n* Directly optimize for **Bayesian** \n [a-priori variance ratios](https://pyoptex.readthedocs.io/en/latest/_docs/doe/customization.html#cust-bayesian-ratio)\n in designs with hard-to-change factors.\n\n* High-performance **model selection** using \n [SAMS](https://pyoptex.readthedocs.io/en/latest/_docs/analysis/customization.html#a-cust-sams)\n (simulated annealing model selection)\n [(Wolters and Bingham, 2012)](https://www.tandfonline.com/doi/abs/10.1198/TECH.2011.08157).\n\n## Getting started\n\nInstall this package using pip\n\n```\npip install pyoptex\n```\n\n## Documentation\nThe documentation for this package can be found at [here](https://pyoptex.readthedocs.io/en/latest/)\n\n## Create your first design\nSee the documentation on [Your first design](https://pyoptex.readthedocs.io/en/latest/_docs/doe/quickstart.html)\n\n## Analyze your first dataset\nSee the documentation on [Your first dataset](https://pyoptex.readthedocs.io/en/latest/_docs/analysis/quickstart.html)\n\n## License\nBSD-3 clause, meaning you can use and alter it for any purpose,\nopen-source or commercial!\nHowever, any open-source contributions to this project are much\nappreciated by the community.\n\n## Contributing\nAny ideas, bugs and features requests can be added as an [issue](https://github.com/mborn1/pyoptex/issues). Any direct code contributions can be added via pull requests.\n",
"bugtrack_url": null,
"license": null,
"summary": "Flexible and accessible design of experiments in Python. Provides industry with an easy package to create designs based with limited expert knowledge. Provides researchers with the ability to easily create new criteria and design structures.",
"version": "1.0.2",
"project_urls": {
"Documentation": "https://pyoptex.readthedocs.io/en/latest/",
"Homepage": "https://github.com/mborn1/pyoptex",
"Issues": "https://github.com/mborn1/pyoptex/issues",
"Repository": "https://github.com/mborn1/pyoptex"
},
"split_keywords": [
"python",
" flexible",
" accessible",
" data-analysis",
" design-of-experiments",
" pyoptex",
" innovation",
" cost-optimization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "747dbc4d73029dbf253792010bfe95b916ad9976a3467bdf10b57586475960ab",
"md5": "8376e85b1a450e091609c86e680e58ba",
"sha256": "ac8248a1e225812a2255a856ac02569d89793f6835dbed59e2bbf690d023b4d4"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "8376e85b1a450e091609c86e680e58ba",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2705624,
"upload_time": "2025-09-15T10:39:22",
"upload_time_iso_8601": "2025-09-15T10:39:22.587216Z",
"url": "https://files.pythonhosted.org/packages/74/7d/bc4d73029dbf253792010bfe95b916ad9976a3467bdf10b57586475960ab/pyoptex-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c53a05614a2e757b25ff0bfc357b80d73bb2eaf41405f5e50da6845174aab68",
"md5": "436dd106731643a902a3dc4cbc53c1f7",
"sha256": "d24805b6a1d2b09516c0a5fa316fa707564263d0544901f65e5a75f9170d0d52"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "436dd106731643a902a3dc4cbc53c1f7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2646964,
"upload_time": "2025-09-15T10:39:24",
"upload_time_iso_8601": "2025-09-15T10:39:24.706097Z",
"url": "https://files.pythonhosted.org/packages/6c/53/a05614a2e757b25ff0bfc357b80d73bb2eaf41405f5e50da6845174aab68/pyoptex-1.0.2-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "467bb92463b211963180532fe13784c31ed0506a9342cdb431110003776f8a40",
"md5": "1e99141b57eee441e2eada3af152f3b4",
"sha256": "ab625aed8db4f0fa6c99c173922530b9cbbfa5e8d679ae6a8a0ce5a4eb9e5dea"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1e99141b57eee441e2eada3af152f3b4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6766534,
"upload_time": "2025-09-15T10:39:26",
"upload_time_iso_8601": "2025-09-15T10:39:26.594832Z",
"url": "https://files.pythonhosted.org/packages/46/7b/b92463b211963180532fe13784c31ed0506a9342cdb431110003776f8a40/pyoptex-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c7551519478a553db8389cff04b3a71c59505f5ae5c9ee4f9cbb29e5ae01107",
"md5": "d6a74d24d67f1cb09a55233353c6070d",
"sha256": "33e5e4958ce982a76b4b607af0853ad4b967b78c000df53ddc4f283624a4b523"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "d6a74d24d67f1cb09a55233353c6070d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6914763,
"upload_time": "2025-09-15T10:39:28",
"upload_time_iso_8601": "2025-09-15T10:39:28.045977Z",
"url": "https://files.pythonhosted.org/packages/6c/75/51519478a553db8389cff04b3a71c59505f5ae5c9ee4f9cbb29e5ae01107/pyoptex-1.0.2-cp310-cp310-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "77577fafd2bea611c311cf6c08f287dc7942dd27ae2b42dcfd8d827ad89540fb",
"md5": "a254f51eb4abd01926e1426afc9710c3",
"sha256": "c7c1fab9b82218370e07908ac0769a63c2e5ec0b164fbda023caea3ee246b5d1"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "a254f51eb4abd01926e1426afc9710c3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 7048015,
"upload_time": "2025-09-15T10:39:29",
"upload_time_iso_8601": "2025-09-15T10:39:29.956375Z",
"url": "https://files.pythonhosted.org/packages/77/57/7fafd2bea611c311cf6c08f287dc7942dd27ae2b42dcfd8d827ad89540fb/pyoptex-1.0.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b8e29d146356078bec4bc1fce52993bc24fe924d2fb51bcd97ea5cb7b24ddae1",
"md5": "92b94c4b57e5ffc7e052c5dcc3b10017",
"sha256": "18902fb89e65cc50eaeb07f3d5a2fb5061dfb93dc17e41968eeb74d86cd6494a"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "92b94c4b57e5ffc7e052c5dcc3b10017",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2491661,
"upload_time": "2025-09-15T10:39:31",
"upload_time_iso_8601": "2025-09-15T10:39:31.415438Z",
"url": "https://files.pythonhosted.org/packages/b8/e2/9d146356078bec4bc1fce52993bc24fe924d2fb51bcd97ea5cb7b24ddae1/pyoptex-1.0.2-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c08a6d173c412cf9de2f4089c428099376b9d2ebc2efae363eb71188319cafc1",
"md5": "3d8ec581f247935f9eeb48e8dcce0f30",
"sha256": "20cc97e2d09be7a9d0627ad3e34ed100721d02d410999f445a2616dc0225fe85"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "3d8ec581f247935f9eeb48e8dcce0f30",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2624105,
"upload_time": "2025-09-15T10:39:32",
"upload_time_iso_8601": "2025-09-15T10:39:32.855111Z",
"url": "https://files.pythonhosted.org/packages/c0/8a/6d173c412cf9de2f4089c428099376b9d2ebc2efae363eb71188319cafc1/pyoptex-1.0.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a00414f5ec0202ed589162b3efe0b250458d23fda2875bfc6f050703d8e8b082",
"md5": "fd2efb73c78f6d5205bca5f52eb1683e",
"sha256": "21133fc0524a80d878eda9724623f2b3e613c48a0ace34a0043d14bec8031663"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "fd2efb73c78f6d5205bca5f52eb1683e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2705446,
"upload_time": "2025-09-15T10:39:34",
"upload_time_iso_8601": "2025-09-15T10:39:34.292568Z",
"url": "https://files.pythonhosted.org/packages/a0/04/14f5ec0202ed589162b3efe0b250458d23fda2875bfc6f050703d8e8b082/pyoptex-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ad793d1edc334f85319f055ae2d3792a4ee8e970844122bffee485ed6371c4b3",
"md5": "cbe82e5812357dfe22a2b597480e1631",
"sha256": "95f3a6199bec175aeaba4b1b938a66dbd15094d920467700d07cd0ce285b79c3"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "cbe82e5812357dfe22a2b597480e1631",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2645634,
"upload_time": "2025-09-15T10:39:36",
"upload_time_iso_8601": "2025-09-15T10:39:36.622221Z",
"url": "https://files.pythonhosted.org/packages/ad/79/3d1edc334f85319f055ae2d3792a4ee8e970844122bffee485ed6371c4b3/pyoptex-1.0.2-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ec9fa6c6acd46199226881795525523737bdaf6acddacde14842a4ad0d74803",
"md5": "c21190d7c0306d00a668ab29fb87e888",
"sha256": "261c779dec4ba99cef5048380a6c5bc43415f75c177c1ecb1475bbed371f65c7"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c21190d7c0306d00a668ab29fb87e888",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 7157183,
"upload_time": "2025-09-15T10:39:38",
"upload_time_iso_8601": "2025-09-15T10:39:38.398082Z",
"url": "https://files.pythonhosted.org/packages/0e/c9/fa6c6acd46199226881795525523737bdaf6acddacde14842a4ad0d74803/pyoptex-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4033a77319b0d6bedad01e5c82e9ed4cdc1182e3394396372cbfb64c4e4a8825",
"md5": "9c1092439ca17e2c5cb5867ad459b824",
"sha256": "0e06e6a8e25d046eaa7cf565173c61e9b6e58a227cb3361314671f39be2dd9fd"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "9c1092439ca17e2c5cb5867ad459b824",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 7280024,
"upload_time": "2025-09-15T10:39:39",
"upload_time_iso_8601": "2025-09-15T10:39:39.898114Z",
"url": "https://files.pythonhosted.org/packages/40/33/a77319b0d6bedad01e5c82e9ed4cdc1182e3394396372cbfb64c4e4a8825/pyoptex-1.0.2-cp311-cp311-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cf39a5f0503fe79d4013b38dc793b11ed05f4c8bf5bb1ae758dc3dce50af76a1",
"md5": "36cc76004481e72df5bd43c23e15599d",
"sha256": "598aa0236ef8d6c58c63eb9785c2d730d62749b943a6a2dcbd81d0ecc3c9842e"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "36cc76004481e72df5bd43c23e15599d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 7454774,
"upload_time": "2025-09-15T10:39:41",
"upload_time_iso_8601": "2025-09-15T10:39:41.520151Z",
"url": "https://files.pythonhosted.org/packages/cf/39/a5f0503fe79d4013b38dc793b11ed05f4c8bf5bb1ae758dc3dce50af76a1/pyoptex-1.0.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9c430b71ac35ed4fbf1ba5c46e6d820956957f0d95bf1d7863a737aa3906f9db",
"md5": "9044b420d9c2b0f6c1fe40ba816eb1a3",
"sha256": "a23d62598aba596415d5568d6d1e81a479011f879d2c76ebab8abad1cd8b2e59"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "9044b420d9c2b0f6c1fe40ba816eb1a3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2487103,
"upload_time": "2025-09-15T10:39:43",
"upload_time_iso_8601": "2025-09-15T10:39:43.544433Z",
"url": "https://files.pythonhosted.org/packages/9c/43/0b71ac35ed4fbf1ba5c46e6d820956957f0d95bf1d7863a737aa3906f9db/pyoptex-1.0.2-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c1a754fc153ddeb6a81b619af165e1f67c5e06bbf858b75489b4f9620995dc7c",
"md5": "30b0bd126c5fe297c50b31c1b1beee16",
"sha256": "b259f90e82747b8126c152ba84c3f9a9d453646322e6cba615ae3ee232f10dc6"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "30b0bd126c5fe297c50b31c1b1beee16",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2625616,
"upload_time": "2025-09-15T10:39:44",
"upload_time_iso_8601": "2025-09-15T10:39:44.933407Z",
"url": "https://files.pythonhosted.org/packages/c1/a7/54fc153ddeb6a81b619af165e1f67c5e06bbf858b75489b4f9620995dc7c/pyoptex-1.0.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a24122b7f60fa61428ee46ce8d53191ca59478e88c4c512602de5b586895f005",
"md5": "858e1070a8c585d4e9aeb180cf508352",
"sha256": "e60e55d6533412aef586800dc09525790a3998e7dda5b70ca889a0426a8f6db8"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "858e1070a8c585d4e9aeb180cf508352",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2719227,
"upload_time": "2025-09-15T10:39:46",
"upload_time_iso_8601": "2025-09-15T10:39:46.313225Z",
"url": "https://files.pythonhosted.org/packages/a2/41/22b7f60fa61428ee46ce8d53191ca59478e88c4c512602de5b586895f005/pyoptex-1.0.2-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "16dc45d4e9e0c425fa40d816eae533c96ad6e643cebc75bccb8ec00bb9434643",
"md5": "04318b4712dc6369672371237f458054",
"sha256": "125452ae10bcfe5d5ef3196efee5565890f1c64eeaab86511ac9030b8bcd41e5"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "04318b4712dc6369672371237f458054",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2657293,
"upload_time": "2025-09-15T10:39:48",
"upload_time_iso_8601": "2025-09-15T10:39:48.115752Z",
"url": "https://files.pythonhosted.org/packages/16/dc/45d4e9e0c425fa40d816eae533c96ad6e643cebc75bccb8ec00bb9434643/pyoptex-1.0.2-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5eb85cccdf2dae81bb5233fb723da4367d16b0f10c88d4c0466627212abca2b0",
"md5": "ef7f9b074efef9b821de2d291d305970",
"sha256": "fba93151d81ffe09a09b27cf98221fd67912288f7ec46c0de9bd2659c5438650"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "ef7f9b074efef9b821de2d291d305970",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 7055885,
"upload_time": "2025-09-15T10:39:49",
"upload_time_iso_8601": "2025-09-15T10:39:49.827038Z",
"url": "https://files.pythonhosted.org/packages/5e/b8/5cccdf2dae81bb5233fb723da4367d16b0f10c88d4c0466627212abca2b0/pyoptex-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8d97435511fd33f0440ba9e78c3f648966501814798c10bf675c133c1aeaa3ea",
"md5": "7ed5615ef6188edf5fa5b552650b04ab",
"sha256": "b54a264f0e093c142ae3b30a73a79cf7ef61f5612d6e13ec403ff99923d33fd7"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "7ed5615ef6188edf5fa5b552650b04ab",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 7173610,
"upload_time": "2025-09-15T10:39:52",
"upload_time_iso_8601": "2025-09-15T10:39:52.959595Z",
"url": "https://files.pythonhosted.org/packages/8d/97/435511fd33f0440ba9e78c3f648966501814798c10bf675c133c1aeaa3ea/pyoptex-1.0.2-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7bf272a3670a985fe791e4e641cebbe835505a81f7fd150f3dfd60071e69ffae",
"md5": "d00de290bc6ca1c8e1e25cad914277da",
"sha256": "2b2aeda61c6e88c198400797f5ff78d214def9b0aa7ca66292d8a07f26229b0f"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "d00de290bc6ca1c8e1e25cad914277da",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 7341637,
"upload_time": "2025-09-15T10:39:54",
"upload_time_iso_8601": "2025-09-15T10:39:54.899605Z",
"url": "https://files.pythonhosted.org/packages/7b/f2/72a3670a985fe791e4e641cebbe835505a81f7fd150f3dfd60071e69ffae/pyoptex-1.0.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "873fd212bb665da49cd948f24654500de18c93273133b1f7c4662a38c578becd",
"md5": "a6ef78f3b9d6528ebcd7156c3cfc9030",
"sha256": "ef1dfabaedcb95b1626f27e44bb0efd4461e25bf18f5ae715f6fa5fb8ba9eab7"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "a6ef78f3b9d6528ebcd7156c3cfc9030",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2487568,
"upload_time": "2025-09-15T10:39:56",
"upload_time_iso_8601": "2025-09-15T10:39:56.613403Z",
"url": "https://files.pythonhosted.org/packages/87/3f/d212bb665da49cd948f24654500de18c93273133b1f7c4662a38c578becd/pyoptex-1.0.2-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7829ca5e77d8508603f8dc6e204040efb3f1510da4dc9192557e3a388a6818ca",
"md5": "7d199fce5a639e0e0d1b5a25bd50ec75",
"sha256": "a5027abc8132ec702a3df32d68c5ba736cf86cf66284e1843b7208da4dd28f60"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "7d199fce5a639e0e0d1b5a25bd50ec75",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2626439,
"upload_time": "2025-09-15T10:39:58",
"upload_time_iso_8601": "2025-09-15T10:39:58.004249Z",
"url": "https://files.pythonhosted.org/packages/78/29/ca5e77d8508603f8dc6e204040efb3f1510da4dc9192557e3a388a6818ca/pyoptex-1.0.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0cccf68a23efe0163473e56ae04fefbcb0eeaacb578d753d6e3e0bfcb2ea34b6",
"md5": "a1a07f63149b44463fe6c6ceae3f49d7",
"sha256": "e12a261ba1bde3dd50d2bbf06e54d6ad36cf23be69a2aaa675bca1406d61529e"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"has_sig": false,
"md5_digest": "a1a07f63149b44463fe6c6ceae3f49d7",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.10",
"size": 2572639,
"upload_time": "2025-09-15T10:39:59",
"upload_time_iso_8601": "2025-09-15T10:39:59.398218Z",
"url": "https://files.pythonhosted.org/packages/0c/cc/f68a23efe0163473e56ae04fefbcb0eeaacb578d753d6e3e0bfcb2ea34b6/pyoptex-1.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5c82c9517ac5310d4ae3acdc7dd25f1078907fafd669f1d0d2fc8ed33aa7f597",
"md5": "0f4504dc4a42fdac2b8252608a05d705",
"sha256": "ce33d95789d59db25965bf673bfa2b4b572503acbb395c506fc6edd1acc227c8"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "0f4504dc4a42fdac2b8252608a05d705",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.10",
"size": 2524279,
"upload_time": "2025-09-15T10:40:01",
"upload_time_iso_8601": "2025-09-15T10:40:01.431129Z",
"url": "https://files.pythonhosted.org/packages/5c/82/c9517ac5310d4ae3acdc7dd25f1078907fafd669f1d0d2fc8ed33aa7f597/pyoptex-1.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dd57471ee6492ab3206051ca6b2640332b5300d36548b6b085a4488e0440728e",
"md5": "3c57f9fc69741500c9fc2b037e4784b1",
"sha256": "f6907465de822ebdaa3817a8dba752e47d26e127484e73aa3cd3f9818302d053"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3c57f9fc69741500c9fc2b037e4784b1",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.10",
"size": 2805143,
"upload_time": "2025-09-15T10:40:03",
"upload_time_iso_8601": "2025-09-15T10:40:03.382621Z",
"url": "https://files.pythonhosted.org/packages/dd/57/471ee6492ab3206051ca6b2640332b5300d36548b6b085a4488e0440728e/pyoptex-1.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "843b2cea128657151aa01c54ded69bcd37391bf00abe03848719250799a98cc3",
"md5": "3f87c70fe29478bda1dfacf871763f28",
"sha256": "fe4d6e017079eae26d277f5ff64feeced0238a2963983d320ab02ed412f727b4"
},
"downloads": -1,
"filename": "pyoptex-1.0.2-pp310-pypy310_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "3f87c70fe29478bda1dfacf871763f28",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.10",
"size": 2559470,
"upload_time": "2025-09-15T10:40:04",
"upload_time_iso_8601": "2025-09-15T10:40:04.872659Z",
"url": "https://files.pythonhosted.org/packages/84/3b/2cea128657151aa01c54ded69bcd37391bf00abe03848719250799a98cc3/pyoptex-1.0.2-pp310-pypy310_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-15 10:39:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mborn1",
"github_project": "pyoptex",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyoptex"
}