get things going kinda

This commit is contained in:
saji 2024-12-13 17:31:10 -06:00
parent 7a8fbda82c
commit 104dfab637
7 changed files with 1866 additions and 85 deletions

File diff suppressed because one or more lines are too long

818
pdm.lock
View file

@ -5,11 +5,23 @@
groups = ["default", "dev"] groups = ["default", "dev"]
strategy = ["inherit_metadata"] strategy = ["inherit_metadata"]
lock_version = "4.5.0" lock_version = "4.5.0"
content_hash = "sha256:6ec3d68699b6437757cd200a2efed5a5a3b5f372f1629b5177c0399297cc5f12" content_hash = "sha256:a1edba805cc867a6316cea6c754bc112f0f79046b604ee515c541505f9c546f7"
[[metadata.targets]] [[metadata.targets]]
requires_python = ">=3.12,<3.13" requires_python = ">=3.12,<3.13"
[[package]]
name = "absl-py"
version = "2.1.0"
requires_python = ">=3.7"
summary = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"},
{file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"},
]
[[package]] [[package]]
name = "appnope" name = "appnope"
version = "0.1.4" version = "0.1.4"
@ -101,6 +113,27 @@ files = [
{file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"},
] ]
[[package]]
name = "chex"
version = "0.1.88"
requires_python = ">=3.9"
summary = "Chex: Testing made fun, in JAX!"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"absl-py>=0.9.0",
"jax>=0.4.27",
"jaxlib>=0.4.27",
"numpy>=1.24.1",
"setuptools; python_version >= \"3.12\"",
"toolz>=0.9.0",
"typing-extensions>=4.2.0",
]
files = [
{file = "chex-0.1.88-py3-none-any.whl", hash = "sha256:234b61a5baa8132802e4b9c5657167d6c8a911d90a59a0bec47d537567e41b75"},
{file = "chex-0.1.88.tar.gz", hash = "sha256:565de897b1373232cdfca5e699f50fa49403d2c7d23f6c5a75a97ef713d2fe36"},
]
[[package]] [[package]]
name = "cloudpickle" name = "cloudpickle"
version = "3.1.0" version = "3.1.0"
@ -204,6 +237,57 @@ files = [
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
] ]
[[package]]
name = "etils"
version = "1.11.0"
requires_python = ">=3.10"
summary = "Collection of common python utils"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "etils-1.11.0-py3-none-any.whl", hash = "sha256:a394cf3476bcec51c221426a70c39cd1006e889456ba41e4d7f12fd6814be7a5"},
{file = "etils-1.11.0.tar.gz", hash = "sha256:aff3278a3be7fddf302dfd80335e9f924244666c71239cd91e836f3d055f1c4a"},
]
[[package]]
name = "etils"
version = "1.11.0"
extras = ["epath", "epy"]
requires_python = ">=3.10"
summary = "Collection of common python utils"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"etils==1.11.0",
"etils[epy]",
"fsspec",
"importlib-resources",
"typing-extensions",
"typing-extensions",
"zipp",
]
files = [
{file = "etils-1.11.0-py3-none-any.whl", hash = "sha256:a394cf3476bcec51c221426a70c39cd1006e889456ba41e4d7f12fd6814be7a5"},
{file = "etils-1.11.0.tar.gz", hash = "sha256:aff3278a3be7fddf302dfd80335e9f924244666c71239cd91e836f3d055f1c4a"},
]
[[package]]
name = "etils"
version = "1.11.0"
extras = ["epy"]
requires_python = ">=3.10"
summary = "Collection of common python utils"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"etils==1.11.0",
"typing-extensions",
]
files = [
{file = "etils-1.11.0-py3-none-any.whl", hash = "sha256:a394cf3476bcec51c221426a70c39cd1006e889456ba41e4d7f12fd6814be7a5"},
{file = "etils-1.11.0.tar.gz", hash = "sha256:aff3278a3be7fddf302dfd80335e9f924244666c71239cd91e836f3d055f1c4a"},
]
[[package]] [[package]]
name = "executing" name = "executing"
version = "2.1.0" version = "2.1.0"
@ -227,6 +311,42 @@ files = [
{file = "Farama_Notifications-0.0.4-py3-none-any.whl", hash = "sha256:14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae"}, {file = "Farama_Notifications-0.0.4-py3-none-any.whl", hash = "sha256:14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae"},
] ]
[[package]]
name = "filelock"
version = "3.16.1"
requires_python = ">=3.8"
summary = "A platform independent file lock."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"},
{file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"},
]
[[package]]
name = "flax"
version = "0.10.2"
requires_python = ">=3.10"
summary = "Flax: A neural network library for JAX designed for flexibility"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"PyYAML>=5.4.1",
"jax>=0.4.27",
"msgpack",
"numpy>=1.23.2; python_version >= \"3.11\"",
"numpy>=1.26.0; python_version >= \"3.12\"",
"optax",
"orbax-checkpoint",
"rich>=11.1",
"tensorstore",
"typing-extensions>=4.2",
]
files = [
{file = "flax-0.10.2-py3-none-any.whl", hash = "sha256:5bc0954b98d1596e8984f8e1bb84105e6e1dd9eae311cee3a777d7a335470a76"},
{file = "flax-0.10.2.tar.gz", hash = "sha256:6f831350026ad48182ba6588bb4dd72dc1084985d9aca923254cb3e4c78d75f3"},
]
[[package]] [[package]]
name = "fonttools" name = "fonttools"
version = "4.55.0" version = "4.55.0"
@ -247,6 +367,18 @@ files = [
{file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"}, {file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"},
] ]
[[package]]
name = "fsspec"
version = "2024.10.0"
requires_python = ">=3.8"
summary = "File-system specification"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "fsspec-2024.10.0-py3-none-any.whl", hash = "sha256:03b9a6785766a4de40368b88906366755e2819e758b83705c88cd7cb5fe81871"},
{file = "fsspec-2024.10.0.tar.gz", hash = "sha256:eda2d8a4116d4f2429db8550f2457da57279247dd930bb12f821b58391359493"},
]
[[package]] [[package]]
name = "gymnasium" name = "gymnasium"
version = "1.0.0" version = "1.0.0"
@ -266,6 +398,37 @@ files = [
{file = "gymnasium-1.0.0.tar.gz", hash = "sha256:9d2b66f30c1b34fe3c2ce7fae65ecf365d0e9982d2b3d860235e773328a3b403"}, {file = "gymnasium-1.0.0.tar.gz", hash = "sha256:9d2b66f30c1b34fe3c2ce7fae65ecf365d0e9982d2b3d860235e773328a3b403"},
] ]
[[package]]
name = "gymnasium"
version = "1.0.0"
extras = ["jax"]
requires_python = ">=3.8"
summary = "A standard API for reinforcement learning and a diverse set of reference environments (formerly Gym)."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"flax>=0.5.0",
"gymnasium==1.0.0",
"jax>=0.4.0",
"jaxlib>=0.4.0",
]
files = [
{file = "gymnasium-1.0.0-py3-none-any.whl", hash = "sha256:b6f40e1e24c5bd419361e1a5b86a9117d2499baecc3a660d44dfff4c465393ad"},
{file = "gymnasium-1.0.0.tar.gz", hash = "sha256:9d2b66f30c1b34fe3c2ce7fae65ecf365d0e9982d2b3d860235e773328a3b403"},
]
[[package]]
name = "humanize"
version = "4.11.0"
requires_python = ">=3.9"
summary = "Python humanize utilities"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "humanize-4.11.0-py3-none-any.whl", hash = "sha256:b53caaec8532bcb2fff70c8826f904c35943f8cecaca29d272d9df38092736c0"},
{file = "humanize-4.11.0.tar.gz", hash = "sha256:e66f36020a2d5a974c504bd2555cf770621dbdbb6d82f94a6857c0b1ea2608be"},
]
[[package]] [[package]]
name = "idna" name = "idna"
version = "3.10" version = "3.10"
@ -278,6 +441,21 @@ files = [
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
] ]
[[package]]
name = "importlib-resources"
version = "6.4.5"
requires_python = ">=3.8"
summary = "Read resources from Python packages"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"zipp>=3.1.0; python_version < \"3.10\"",
]
files = [
{file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"},
{file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"},
]
[[package]] [[package]]
name = "iniconfig" name = "iniconfig"
version = "2.0.0" version = "2.0.0"
@ -404,6 +582,21 @@ files = [
{file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"},
] ]
[[package]]
name = "jinja2"
version = "3.1.4"
requires_python = ">=3.7"
summary = "A very fast and expressive template engine."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"MarkupSafe>=2.0",
]
files = [
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
]
[[package]] [[package]]
name = "jupyter-client" name = "jupyter-client"
version = "8.6.3" version = "8.6.3"
@ -468,6 +661,42 @@ files = [
{file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"},
] ]
[[package]]
name = "markdown-it-py"
version = "3.0.0"
requires_python = ">=3.8"
summary = "Python port of markdown-it. Markdown parsing, done right!"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"mdurl~=0.1",
]
files = [
{file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
{file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
]
[[package]]
name = "markupsafe"
version = "3.0.2"
requires_python = ">=3.9"
summary = "Safely add untrusted strings to HTML/XML markup."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"},
{file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"},
{file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"},
{file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"},
{file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"},
{file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"},
{file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"},
{file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"},
{file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"},
{file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"},
{file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
]
[[package]] [[package]]
name = "matplotlib" name = "matplotlib"
version = "3.9.2" version = "3.9.2"
@ -512,6 +741,18 @@ files = [
{file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"},
] ]
[[package]]
name = "mdurl"
version = "0.1.2"
requires_python = ">=3.7"
summary = "Markdown URL utilities"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
[[package]] [[package]]
name = "ml-dtypes" name = "ml-dtypes"
version = "0.5.0" version = "0.5.0"
@ -538,12 +779,45 @@ files = [
{file = "ml_dtypes-0.5.0.tar.gz", hash = "sha256:3e7d3a380fe73a63c884f06136f8baa7a5249cc8e9fdec677997dd78549f8128"}, {file = "ml_dtypes-0.5.0.tar.gz", hash = "sha256:3e7d3a380fe73a63c884f06136f8baa7a5249cc8e9fdec677997dd78549f8128"},
] ]
[[package]]
name = "mpmath"
version = "1.3.0"
summary = "Python library for arbitrary-precision floating-point arithmetic"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"},
{file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"},
]
[[package]]
name = "msgpack"
version = "1.1.0"
requires_python = ">=3.8"
summary = "MessagePack serializer"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d"},
{file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2"},
{file = "msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420"},
{file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2"},
{file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39"},
{file = "msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f"},
{file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247"},
{file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c"},
{file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b"},
{file = "msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b"},
{file = "msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"},
{file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"},
]
[[package]] [[package]]
name = "nest-asyncio" name = "nest-asyncio"
version = "1.6.0" version = "1.6.0"
requires_python = ">=3.5" requires_python = ">=3.5"
summary = "Patch asyncio to allow nested event loops" summary = "Patch asyncio to allow nested event loops"
groups = ["dev"] groups = ["default", "dev"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\"" marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [ files = [
{file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"},
@ -551,44 +825,201 @@ files = [
] ]
[[package]] [[package]]
name = "numpy" name = "networkx"
version = "2.1.3" version = "3.4.2"
requires_python = ">=3.10" requires_python = ">=3.10"
summary = "Python package for creating and manipulating graphs and networks"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"},
{file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"},
]
[[package]]
name = "numpy"
version = "1.26.4"
requires_python = ">=3.9"
summary = "Fundamental package for array computing in Python" summary = "Fundamental package for array computing in Python"
groups = ["default"] groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\"" marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [ files = [
{file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"},
{file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"},
{file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"},
{file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"},
{file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"},
{file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"},
{file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"},
{file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"},
{file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"},
{file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, ]
{file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"},
{file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, [[package]]
{file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, name = "nvidia-cublas-cu12"
{file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, version = "12.4.5.8"
{file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, requires_python = ">=3"
{file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, summary = "CUBLAS native runtime libraries"
{file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, groups = ["default"]
{file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
{file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, files = [
{file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0f8aa1706812e00b9f19dfe0cdb3999b092ccb8ca168c0db5b8ea712456fd9b3"},
{file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b"},
{file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-win_amd64.whl", hash = "sha256:5a796786da89203a0657eda402bcdcec6180254a8ac22d72213abc42069522dc"},
{file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, ]
{file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"},
{file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, [[package]]
{file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, name = "nvidia-cuda-cupti-cu12"
{file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, version = "12.4.127"
{file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, requires_python = ">=3"
{file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, summary = "CUDA profiling tools runtime libs."
{file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, groups = ["default"]
{file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:79279b35cf6f91da114182a5ce1864997fd52294a87a16179ce275773799458a"},
{file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb"},
{file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:5688d203301ab051449a2b1cb6690fbe90d2b372f411521c86018b950f3d7922"},
]
[[package]]
name = "nvidia-cuda-nvrtc-cu12"
version = "12.4.127"
requires_python = ">=3"
summary = "NVRTC native runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0eedf14185e04b76aa05b1fea04133e59f465b6f960c0cbf4e37c3cb6b0ea198"},
{file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338"},
{file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:a961b2f1d5f17b14867c619ceb99ef6fcec12e46612711bcec78eb05068a60ec"},
]
[[package]]
name = "nvidia-cuda-runtime-cu12"
version = "12.4.127"
requires_python = ">=3"
summary = "CUDA Runtime native Libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:961fe0e2e716a2a1d967aab7caee97512f71767f852f67432d572e36cb3a11f3"},
{file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5"},
{file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:09c2e35f48359752dfa822c09918211844a3d93c100a715d79b59591130c5e1e"},
]
[[package]]
name = "nvidia-cudnn-cu12"
version = "9.1.0.70"
requires_python = ">=3"
summary = "cuDNN runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"nvidia-cublas-cu12",
]
files = [
{file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"},
{file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"},
]
[[package]]
name = "nvidia-cufft-cu12"
version = "11.2.1.3"
requires_python = ">=3"
summary = "CUFFT native runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"nvidia-nvjitlink-cu12",
]
files = [
{file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5dad8008fc7f92f5ddfa2101430917ce2ffacd86824914c82e28990ad7f00399"},
{file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9"},
{file = "nvidia_cufft_cu12-11.2.1.3-py3-none-win_amd64.whl", hash = "sha256:d802f4954291101186078ccbe22fc285a902136f974d369540fd4a5333d1440b"},
]
[[package]]
name = "nvidia-curand-cu12"
version = "10.3.5.147"
requires_python = ">=3"
summary = "CURAND native runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1f173f09e3e3c76ab084aba0de819c49e56614feae5c12f69883f4ae9bb5fad9"},
{file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b"},
{file = "nvidia_curand_cu12-10.3.5.147-py3-none-win_amd64.whl", hash = "sha256:f307cc191f96efe9e8f05a87096abc20d08845a841889ef78cb06924437f6771"},
]
[[package]]
name = "nvidia-cusolver-cu12"
version = "11.6.1.9"
requires_python = ">=3"
summary = "CUDA solver native runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"nvidia-cublas-cu12",
"nvidia-cusparse-cu12",
"nvidia-nvjitlink-cu12",
]
files = [
{file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d338f155f174f90724bbde3758b7ac375a70ce8e706d70b018dd3375545fc84e"},
{file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260"},
{file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-win_amd64.whl", hash = "sha256:e77314c9d7b694fcebc84f58989f3aa4fb4cb442f12ca1a9bde50f5e8f6d1b9c"},
]
[[package]]
name = "nvidia-cusparse-cu12"
version = "12.3.1.170"
requires_python = ">=3"
summary = "CUSPARSE native runtime libraries"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"nvidia-nvjitlink-cu12",
]
files = [
{file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9d32f62896231ebe0480efd8a7f702e143c98cfaa0e8a76df3386c1ba2b54df3"},
{file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1"},
{file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-win_amd64.whl", hash = "sha256:9bc90fb087bc7b4c15641521f31c0371e9a612fc2ba12c338d3ae032e6b6797f"},
]
[[package]]
name = "nvidia-nccl-cu12"
version = "2.21.5"
requires_python = ">=3"
summary = "NVIDIA Collective Communication Library (NCCL) Runtime"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"},
]
[[package]]
name = "nvidia-nvjitlink-cu12"
version = "12.4.127"
requires_python = ">=3"
summary = "Nvidia JIT LTO Library"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"},
{file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"},
{file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"},
]
[[package]]
name = "nvidia-nvtx-cu12"
version = "12.4.127"
requires_python = ">=3"
summary = "NVIDIA Tools Extension"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7959ad635db13edf4fc65c06a6e9f9e55fc2f92596db928d169c0bb031e88ef3"},
{file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a"},
{file = "nvidia_nvtx_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:641dccaaa1139f3ffb0d3164b4b84f9d253397e38246a4f2f36728b48566d485"},
] ]
[[package]] [[package]]
@ -603,6 +1034,52 @@ files = [
{file = "opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac"}, {file = "opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac"},
] ]
[[package]]
name = "optax"
version = "0.2.4"
requires_python = ">=3.9"
summary = "A gradient processing and optimization library in JAX."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"absl-py>=0.7.1",
"chex>=0.1.87",
"etils[epy]",
"jax>=0.4.27",
"jaxlib>=0.4.27",
"numpy>=1.18.0",
]
files = [
{file = "optax-0.2.4-py3-none-any.whl", hash = "sha256:db35c04e50b52596662efb002334de08c2a0a74971e4da33f467e84fac08886a"},
{file = "optax-0.2.4.tar.gz", hash = "sha256:4e05d3d5307e6dde4c319187ae36e6cd3a0c035d4ed25e9e992449a304f47336"},
]
[[package]]
name = "orbax-checkpoint"
version = "0.10.2"
requires_python = ">=3.10"
summary = "Orbax Checkpoint"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"absl-py",
"etils[epath,epy]",
"humanize",
"jax>=0.4.34",
"msgpack",
"nest-asyncio",
"numpy",
"protobuf",
"pyyaml",
"simplejson>=3.16.0",
"tensorstore>=0.1.68",
"typing-extensions",
]
files = [
{file = "orbax_checkpoint-0.10.2-py3-none-any.whl", hash = "sha256:dcfc425674bd8d4934986143bd22a37cd634d034652c5d30d83c539ef8587941"},
{file = "orbax_checkpoint-0.10.2.tar.gz", hash = "sha256:e575ebe1f94e5cb6353ab8c9df81de0ca7cddc118645c3bfc17b8344f19d42f1"},
]
[[package]] [[package]]
name = "packaging" name = "packaging"
version = "24.2" version = "24.2"
@ -615,6 +1092,32 @@ files = [
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
] ]
[[package]]
name = "pandas"
version = "2.2.3"
requires_python = ">=3.9"
summary = "Powerful data structures for data analysis, time series, and statistics"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"numpy>=1.22.4; python_version < \"3.11\"",
"numpy>=1.23.2; python_version == \"3.11\"",
"numpy>=1.26.0; python_version >= \"3.12\"",
"python-dateutil>=2.8.2",
"pytz>=2020.1",
"tzdata>=2022.7",
]
files = [
{file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"},
{file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"},
{file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"},
{file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"},
{file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"},
{file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"},
{file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"},
{file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"},
]
[[package]] [[package]]
name = "parso" name = "parso"
version = "0.8.4" version = "0.8.4"
@ -719,6 +1222,23 @@ files = [
{file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"},
] ]
[[package]]
name = "protobuf"
version = "5.29.1"
requires_python = ">=3.8"
summary = ""
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "protobuf-5.29.1-cp310-abi3-win32.whl", hash = "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110"},
{file = "protobuf-5.29.1-cp310-abi3-win_amd64.whl", hash = "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34"},
{file = "protobuf-5.29.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18"},
{file = "protobuf-5.29.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155"},
{file = "protobuf-5.29.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d"},
{file = "protobuf-5.29.1-py3-none-any.whl", hash = "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0"},
{file = "protobuf-5.29.1.tar.gz", hash = "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb"},
]
[[package]] [[package]]
name = "psutil" name = "psutil"
version = "6.1.0" version = "6.1.0"
@ -776,7 +1296,7 @@ name = "pygments"
version = "2.18.0" version = "2.18.0"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Pygments is a syntax highlighting package written in Python." summary = "Pygments is a syntax highlighting package written in Python."
groups = ["dev"] groups = ["default", "dev"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\"" marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [ files = [
{file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
@ -899,6 +1419,17 @@ files = [
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
] ]
[[package]]
name = "pytz"
version = "2024.2"
summary = "World timezone definitions, modern and historical"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"},
{file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"},
]
[[package]] [[package]]
name = "pyvista" name = "pyvista"
version = "0.44.2" version = "0.44.2"
@ -948,6 +1479,26 @@ files = [
{file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"},
] ]
[[package]]
name = "pyyaml"
version = "6.0.2"
requires_python = ">=3.8"
summary = "YAML parser and emitter for Python"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
{file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
{file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
{file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
]
[[package]] [[package]]
name = "pyzmq" name = "pyzmq"
version = "26.2.0" version = "26.2.0"
@ -1007,6 +1558,23 @@ files = [
{file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
] ]
[[package]]
name = "rich"
version = "13.9.4"
requires_python = ">=3.8.0"
summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"markdown-it-py>=2.2.0",
"pygments<3.0.0,>=2.13.0",
"typing-extensions<5.0,>=4.0.0; python_version < \"3.11\"",
]
files = [
{file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"},
{file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"},
]
[[package]] [[package]]
name = "scipy" name = "scipy"
version = "1.14.1" version = "1.14.1"
@ -1049,6 +1617,18 @@ files = [
{file = "scooby-0.10.0.tar.gz", hash = "sha256:7ea33c262c0cc6a33c6eeeb5648df787be4f22660e53c114e5fff1b811a8854f"}, {file = "scooby-0.10.0.tar.gz", hash = "sha256:7ea33c262c0cc6a33c6eeeb5648df787be4f22660e53c114e5fff1b811a8854f"},
] ]
[[package]]
name = "setuptools"
version = "75.6.0"
requires_python = ">=3.9"
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"},
{file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"},
]
[[package]] [[package]]
name = "shiboken6" name = "shiboken6"
version = "6.8.0.2" version = "6.8.0.2"
@ -1063,6 +1643,31 @@ files = [
{file = "shiboken6-6.8.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:b11e750e696bb565d897e0f5836710edfb86bd355f87b09988bd31b2aad404d3"}, {file = "shiboken6-6.8.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:b11e750e696bb565d897e0f5836710edfb86bd355f87b09988bd31b2aad404d3"},
] ]
[[package]]
name = "simplejson"
version = "3.19.3"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.5"
summary = "Simple, fast, extensible JSON encoder/decoder for Python"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "simplejson-3.19.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:66a0399e21c2112acacfebf3d832ebe2884f823b1c7e6d1363f2944f1db31a99"},
{file = "simplejson-3.19.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6ef9383c5e05f445be60f1735c1816163c874c0b1ede8bb4390aff2ced34f333"},
{file = "simplejson-3.19.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:42e5acf80d4d971238d4df97811286a044d720693092b20a56d5e56b7dcc5d09"},
{file = "simplejson-3.19.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0b0efc7279d768db7c74d3d07f0b5c81280d16ae3fb14e9081dc903e8360771"},
{file = "simplejson-3.19.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0552eb06e7234da892e1d02365cd2b7b2b1f8233aa5aabdb2981587b7cc92ea0"},
{file = "simplejson-3.19.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf6a3b9a7d7191471b464fe38f684df10eb491ec9ea454003edb45a011ab187"},
{file = "simplejson-3.19.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7017329ca8d4dca94ad5e59f496e5fc77630aecfc39df381ffc1d37fb6b25832"},
{file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:67a20641afebf4cfbcff50061f07daad1eace6e7b31d7622b6fa2c40d43900ba"},
{file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:dd6a7dabcc4c32daf601bc45e01b79175dde4b52548becea4f9545b0a4428169"},
{file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:08f9b443a94e72dd02c87098c96886d35790e79e46b24e67accafbf13b73d43b"},
{file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa97278ae6614346b5ca41a45a911f37a3261b57dbe4a00602048652c862c28b"},
{file = "simplejson-3.19.3-cp312-cp312-win32.whl", hash = "sha256:ef28c3b328d29b5e2756903aed888960bc5df39b4c2eab157ae212f70ed5bf74"},
{file = "simplejson-3.19.3-cp312-cp312-win_amd64.whl", hash = "sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a"},
{file = "simplejson-3.19.3-py3-none-any.whl", hash = "sha256:49cc4c7b940d43bd12bf87ec63f28cbc4964fc4e12c031cc8cd01650f43eb94e"},
{file = "simplejson-3.19.3.tar.gz", hash = "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680"},
]
[[package]] [[package]]
name = "six" name = "six"
version = "1.16.0" version = "1.16.0"
@ -1075,6 +1680,26 @@ files = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
] ]
[[package]]
name = "stable-baselines3"
version = "2.4.0"
requires_python = ">=3.8"
summary = "Pytorch version of Stable Baselines, implementations of reinforcement learning algorithms."
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"cloudpickle",
"gymnasium<1.1.0,>=0.29.1",
"matplotlib",
"numpy<2.0,>=1.20",
"pandas",
"torch>=1.13",
]
files = [
{file = "stable_baselines3-2.4.0-py3-none-any.whl", hash = "sha256:c37c6986d8b3b253e4e52620dc1e4eaeb28b896ee411de289782deab8f83721f"},
{file = "stable_baselines3-2.4.0.tar.gz", hash = "sha256:c56f70c10e0a99973130a0ebee83619d0ec3bf1197e0196383276404d2190cc1"},
]
[[package]] [[package]]
name = "stack-data" name = "stack-data"
version = "0.6.3" version = "0.6.3"
@ -1091,6 +1716,90 @@ files = [
{file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
] ]
[[package]]
name = "sympy"
version = "1.13.1"
requires_python = ">=3.8"
summary = "Computer algebra system (CAS) in Python"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"mpmath<1.4,>=1.1.0",
]
files = [
{file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"},
{file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"},
]
[[package]]
name = "tensorstore"
version = "0.1.71"
requires_python = ">=3.10"
summary = "Read and write large, multi-dimensional arrays"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"ml-dtypes>=0.3.1",
"numpy>=1.22.0",
]
files = [
{file = "tensorstore-0.1.71-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:0bd87899e1c6049b078e785e8b7871e2579202f5b929e89c3c37340965b922bb"},
{file = "tensorstore-0.1.71-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3a24feb6195f1c222162965c0107c9ff56d322cca23e19f0e66636f6eb80f14"},
{file = "tensorstore-0.1.71-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87a97a34b0475ddc7d2afc40e5dd7f8d12522aa81edfbcccb39628cf591454d5"},
{file = "tensorstore-0.1.71-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ced5430bcdfa7fcb3a6bdc44733176158cb877b35bdd233cac82e25b4cc94e92"},
{file = "tensorstore-0.1.71-cp312-cp312-win_amd64.whl", hash = "sha256:583f0ec143062176ca21fe8dcc3b3b6f94d7f4ea643443b49942d3d1a2fa29b4"},
{file = "tensorstore-0.1.71.tar.gz", hash = "sha256:5c37c7b385517b568282a7aedded446216335d0cb41187c93c80b53596c92c96"},
]
[[package]]
name = "toolz"
version = "1.0.0"
requires_python = ">=3.8"
summary = "List processing tools and functional utilities"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"},
{file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"},
]
[[package]]
name = "torch"
version = "2.5.1"
requires_python = ">=3.8.0"
summary = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
dependencies = [
"filelock",
"fsspec",
"jinja2",
"networkx",
"nvidia-cublas-cu12==12.4.5.8; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cuda-cupti-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cuda-nvrtc-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cuda-runtime-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cudnn-cu12==9.1.0.70; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cufft-cu12==11.2.1.3; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-curand-cu12==10.3.5.147; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cusolver-cu12==11.6.1.9; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-cusparse-cu12==12.3.1.170; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-nccl-cu12==2.21.5; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-nvjitlink-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"nvidia-nvtx-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
"setuptools; python_version >= \"3.12\"",
"sympy==1.12.1; python_version == \"3.8\"",
"sympy==1.13.1; python_version >= \"3.9\"",
"triton==3.1.0; platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\"",
"typing-extensions>=4.8.0",
]
files = [
{file = "torch-2.5.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed231a4b3a5952177fafb661213d690a72caaad97d5824dd4fc17ab9e15cec03"},
{file = "torch-2.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:3f4b7f10a247e0dcd7ea97dc2d3bfbfc90302ed36d7f3952b0008d0df264e697"},
{file = "torch-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:73e58e78f7d220917c5dbfad1a40e09df9929d3b95d25e57d9f8558f84c9a11c"},
{file = "torch-2.5.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:8c712df61101964eb11910a846514011f0b6f5920c55dbf567bff8a34163d5b1"},
]
[[package]] [[package]]
name = "tornado" name = "tornado"
version = "6.4.2" version = "6.4.2"
@ -1124,6 +1833,19 @@ files = [
{file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"},
] ]
[[package]]
name = "triton"
version = "3.1.0"
summary = "A language and compiler for custom Deep Learning operations"
groups = ["default"]
marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\" and python_version >= \"3.12\""
dependencies = [
"filelock",
]
files = [
{file = "triton-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8182f42fd8080a7d39d666814fa36c5e30cc00ea7eeeb1a2983dbb4c99a0fdc"},
]
[[package]] [[package]]
name = "typing-extensions" name = "typing-extensions"
version = "4.12.2" version = "4.12.2"
@ -1136,6 +1858,18 @@ files = [
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
] ]
[[package]]
name = "tzdata"
version = "2024.2"
requires_python = ">=2"
summary = "Provider of IANA time zone data"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"},
{file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
]
[[package]] [[package]]
name = "urllib3" name = "urllib3"
version = "2.2.3" version = "2.2.3"
@ -1177,3 +1911,15 @@ files = [
{file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
{file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
] ]
[[package]]
name = "zipp"
version = "3.21.0"
requires_python = ">=3.9"
summary = "Backport of pathlib-compatible object wrapper for zip files"
groups = ["default"]
marker = "python_version >= \"3.12\" and python_version < \"3.13\""
files = [
{file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
{file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
]

View file

@ -5,7 +5,7 @@ description = "A solar car racing simulation library and GUI tool"
authors = [ authors = [
{name = "saji", email = "saji@saji.dev"}, {name = "saji", email = "saji@saji.dev"},
] ]
dependencies = ["pyqtgraph>=0.13.7", "jax>=0.4.35", "pytest>=8.3.3", "pyside6>=6.8.0.2", "matplotlib>=3.9.2", "gymnasium>=1.0.0", "pyvista>=0.44.2", "pyvistaqt>=0.11.1"] dependencies = ["pyqtgraph>=0.13.7", "jax>=0.4.35", "pytest>=8.3.3", "pyside6>=6.8.0.2", "matplotlib>=3.9.2", "gymnasium[jax]>=1.0.0", "pyvista>=0.44.2", "pyvistaqt>=0.11.1", "stable-baselines3>=2.4.0"]
requires-python = ">=3.10,<3.13" requires-python = ">=3.10,<3.13"
readme = "README.md" readme = "README.md"
license = {text = "MIT"} license = {text = "MIT"}

View file

@ -1,34 +1,85 @@
from typing import Optional
import numpy as np
import gymnasium as gym import gymnasium as gym
from solarcarsim.physsim import CarParams, DefaultCar import solarcarsim.physsim as sim
import jax
import jax.numpy as jnp
import numpy as np
from typing import Any
from functools import partial
from jax import vmap
class SolarRaceV1(gym.Env): class SolarRaceV1(gym.Env):
"""A primitive hill climber. Aims to solve the given route optimizing """A primitive hill climber. Aims to solve the given route optimizing
for energy usage and on-time arrival. Does not have wind or cloud simulations. for energy usage and on-time arrival.
Does simulate drag, rolling resistance, and slope power. The action space is the
velocity of the car.
""" """
def __init__(self, car: CarParams = DefaultCar(), terrain = None, timestep: float = 1.0): # these are some simulator helpers
# TODO: terrain parameters def _reset_sim(self, key):
self._environment = sim.make_environment(key)
# self._state = jnp.array([np.array([x], dtype="float32") for x in (0,0,0, 10000.0, 600.0)])
self._state = jnp.array([[0],[0],[0],[10000.0], [600.0]])
# self._state = jnp.array([0, 0,0,10000.0, 600.0])
# car max speed. def _vision_function(self):
self.params = { # extract the vision results.
"timestep": timestep, def slookup(x):
"car": car return jax.lax.dynamic_slice(self._environment[0], x, (100,100))
pos = jnp.astype(jnp.round(self._state[0]), "int32")
time = jnp.astype(jnp.round(self._state[1]), "int32")
wind_view = slookup(jnp.hstack([pos,time]))
slope_view = jax.lax.dynamic_slice(self._environment[2], pos, (100,))
return slope_view, wind_view
def _get_obs(self):
slope_view, wind_view = self._vision_function()
return {
"position": self._state[0],
"time": self._state[1],
"energy": self._state[2],
"dist_remaining": self._state[3],
"time_remaining": self._state[4],
"terrain": slope_view,
"wind": wind_view,
} }
self.observation_space = gym.spaces.Dict({ def __init__(self, car: sim.CarParams = sim.CarParams(), timestep: float = 1.0, seed=1234):
"position": gym.spaces.Box(0, 1000.0, shape=(1,)),
"time": gym.spaces.Box(0,1000),
"energy": gym.spaces.Box(-1.0e6, 0.)
# TODO: add the elevation profile to the observations.
})
self.action_space = gym.spaces.Box(0, 5.0, shape=(1,)) #velocity, m/s self._reset_sim(jax.random.key(seed))
self._timestep = timestep
self._car = car
self._simstep = sim.forwardv2
self._simreward = sim.reward
self.observation_space = gym.spaces.Dict(
{
"position": gym.spaces.Box(-100, 10100.0, shape=(1,)),
"time": gym.spaces.Box(0, 1000.0),
"energy": gym.spaces.Box(-1.0e6, 0.0),
"dist_remaining": gym.spaces.Box(0.0, 10100.0),
"time_remaining": gym.spaces.Box(0.0, 600.0),
# This is the window into the future/ahead spatially.
"terrain": gym.spaces.Box(-1.0, 1.0, shape=(100,)), # slope
"wind": gym.spaces.Box(-10.0, 10.0, shape=(100, 100)),
}
)
self.action_space = gym.spaces.Box(-1.0, 1.0, shape=(1,)) # velocity, m/s
def reset(self, *, seed = None, options = None):
self._reset_sim(jax.random.key(seed or 0))
super().reset(seed=seed, options=options)
return self._get_obs(), {}
def step(self, action):
wind, elevation, slope = self._environment
self._state = self._simstep(self._state, action, self._timestep,wind, elevation, slope, self._car)
reward = self._simreward(self._state)[0]
terminated = False
truncated = False
if jnp.all(self._state[0] > 10000):
terminated = True
if self._state[1] > 600:
truncated = True
return self._get_obs(), reward, terminated, truncated, {}

0
src/solarcarsim/main.py Normal file
View file

343
src/solarcarsim/noise.py Normal file
View file

@ -0,0 +1,343 @@
import jax
import jax.numpy as jnp
from jax import random
from functools import partial
from typing import Tuple, Optional
@partial(jax.jit, static_argnums=(1,))
def generate_permutation(key, size: int = 256) -> jnp.ndarray:
"""Generate a permutation table for Perlin noise."""
perm = jnp.arange(size, dtype=jnp.int32)
return random.permutation(key, perm)
@jax.jit
def fade(t: jnp.ndarray) -> jnp.ndarray:
"""Smoothing function for Perlin noise interpolation."""
return t * t * t * (t * (t * 6 - 15) + 10)
@jax.jit
def grad(hash: jnp.ndarray, x: jnp.ndarray, y: jnp.ndarray) -> jnp.ndarray:
"""Calculate gradient for Perlin noise."""
h = hash & 7
u = jnp.where(h < 4, x, y)
v = jnp.where(h < 4, y, x)
return jnp.where(h & 1, -u, u) + jnp.where(h & 2, -2.0 * v, 2.0 * v)
@partial(jax.jit, static_argnums=(1, 2))
def perlin_noise_2d(
key,
width: int,
height: int,
scale: float = 50.0
) -> jnp.ndarray:
"""
Generate 2D Perlin noise.
Args:
key: JAX random key
width: Width of the output noise
height: Height of the output noise
scale: Scale of the noise pattern
Returns:
2D array of Perlin noise values
"""
# Generate permutation table
p = generate_permutation(key)
p = jnp.concatenate([p, p])
# Create coordinate grid
x = jnp.arange(width, dtype=jnp.float32)
y = jnp.arange(height, dtype=jnp.float32)
X, Y = jnp.meshgrid(x, y)
# Scale coordinates
X = X / scale
Y = Y / scale
# Integer coordinates
X_int = jnp.floor(X).astype(jnp.int32) & 255
Y_int = jnp.floor(Y).astype(jnp.int32) & 255
# Fractional coordinates
X_frac = X - jnp.floor(X)
Y_frac = Y - jnp.floor(Y)
# Fade factors
u = fade(X_frac)
v = fade(Y_frac)
# Hash coordinates
A = p[X_int] + Y_int
AA = p[A]
AB = p[A + 1]
B = p[X_int + 1] + Y_int
BA = p[B]
BB = p[B + 1]
# Generate gradients
g1 = grad(AA, X_frac, Y_frac)
g2 = grad(BA, X_frac - 1, Y_frac)
g3 = grad(AB, X_frac, Y_frac - 1)
g4 = grad(BB, X_frac - 1, Y_frac - 1)
# Interpolate
t1 = g1 + u * (g2 - g1)
t2 = g3 + u * (g4 - g3)
return t1 + v * (t2 - t1)
@partial(jax.jit, static_argnums=(1, 2, 3, 4, 5))
def fractal_noise_2d(
key,
width: int,
height: int,
octaves: int = 6,
persistence: float = 0.5,
scale: float = 800.0
) -> jnp.ndarray:
"""
Generate 2D fractal noise (fBm) using Perlin noise.
Args:
key: JAX random key
width: Width of the output noise
height: Height of the output noise
octaves: Number of octaves to combine
persistence: How much each octave contributes
scale: Initial scale of the noise pattern
Returns:
2D array of fractal noise values
"""
result = jnp.zeros((height, width))
max_amplitude = 0.0
for i in range(octaves):
key, subkey = random.split(key)
amplitude = persistence ** i
frequency = 2 ** i
octave = perlin_noise_2d(
subkey,
width,
height,
scale / frequency
)
result += amplitude * octave
max_amplitude += amplitude
# Normalize
return result / max_amplitude
# Example usage
@partial(jax.jit, static_argnums=(1, 2, 3))
def generate_noise_texture(
key,
width: int,
height: int,
noise_type: str = "perlin"
) -> jnp.ndarray:
"""
Generate a noise texture using either Perlin or fractal noise.
Args:
key: JAX random key
width: Width of the texture
height: Height of the texture
noise_type: Either "perlin" or "fractal"
Returns:
2D array of noise values normalized to [0, 1]
"""
if noise_type == "perlin":
noise = perlin_noise_2d(key, width, height)
else:
noise = fractal_noise_2d(key, width, height)
# Normalize to [0, 1]
noise = (noise - jnp.min(noise)) / (jnp.max(noise) - jnp.min(noise))
return noise
@jax.jit
def grad1d(hash: jnp.ndarray, x: jnp.ndarray) -> jnp.ndarray:
"""Calculate gradient for 1D Perlin noise."""
h = hash & 15
grad = 1.0 + (h & 7) # Gradient value 1-8
return jnp.where(h & 8, -grad, grad) * x
@partial(jax.jit, static_argnums=(1,))
def perlin_noise_1d(
key,
length: int,
scale: float = 50.0
) -> jnp.ndarray:
"""
Generate 1D Perlin noise, suitable for elevation profiles.
Args:
key: JAX random key
length: Length of the output noise array
scale: Scale of the noise pattern
Returns:
1D array of Perlin noise values
"""
# Generate permutation table
p = generate_permutation(key)
p = jnp.concatenate([p, p])
# Create coordinate array
x = jnp.arange(length, dtype=jnp.float32) / scale
# Integer and fractional coordinates
x0 = jnp.floor(x).astype(jnp.int32) & 255
x_frac = x - jnp.floor(x)
# Fade factor
u = fade(x_frac)
# Hash coordinates
A = p[x0]
B = p[x0 + 1]
# Generate gradients and interpolate
g1 = grad1d(A, x_frac)
g2 = grad1d(B, x_frac - 1)
return g1 + u * (g2 - g1)
@partial(jax.jit, static_argnums=(1, 2, 3))
def fractal_noise_1d(
key,
length: int,
octaves: int = 6,
persistence: float = 0.5,
scale: float = 50.0,
height_scale: float = 1.0
) -> jnp.ndarray:
"""
Generate 1D fractal noise (fBm) using Perlin noise, optimized for elevation profiles.
Args:
key: JAX random key
length: Length of the output noise array
octaves: Number of octaves to combine
persistence: How much each octave contributes
scale: Initial scale of the noise pattern
height_scale: Scaling factor for the final height values
Returns:
1D array of fractal noise values
"""
result = jnp.zeros(length)
max_amplitude = 0.0
for i in range(octaves):
key, subkey = random.split(key)
amplitude = persistence ** i
frequency = 2 ** i
octave = perlin_noise_1d(
subkey,
length,
scale / frequency
)
result += amplitude * octave
max_amplitude += amplitude
# Normalize and apply height scaling
return (result / max_amplitude) * height_scale
def generate_wind_field(
key,
length: int,
time_steps: int,
base_wind: float = 0.0,
wind_variation: float = 5.0,
spatial_scale: float = 100.0,
temporal_scale: float = 50.0,
octaves: int = 4,
persistence: float = 0.5
) -> jnp.ndarray:
"""
Generate a 2D wind field that varies smoothly in both space and time.
Args:
key: JAX random key
length: Spatial length of the wind field
time_steps: Number of time steps to generate
base_wind: Base wind speed (m/s)
wind_variation: Maximum variation in wind speed (m/s)
spatial_scale: Scale of spatial variations
temporal_scale: Scale of temporal variations
octaves: Number of octaves for fractal noise
persistence: Persistence for fractal noise
Returns:
2D array of wind speeds (time_steps × length)
"""
# Generate 2D noise field
noise = fractal_noise_2d(
key,
length,
time_steps,
octaves,
persistence,
spatial_scale
)
# Scale noise to wind speeds
wind = base_wind + (noise - 0.5) * 2 * wind_variation
# Add temporal coherence by applying smoothing in time dimension
# This ensures wind changes gradually over time
temporal_kernel = jnp.exp(-jnp.arange(5)**2 / (2 * (temporal_scale/100)**2))
temporal_kernel = temporal_kernel / jnp.sum(temporal_kernel)
wind = jax.scipy.signal.convolve(
wind,
temporal_kernel[:, jnp.newaxis],
mode='same'
)
return wind
def generate_elevation_profile(
key,
length: int,
base_height: float = 100.0,
height_variation: float = 50.0,
octaves: int = 6,
persistence: float = 0.5,
scale: float = 50.0
) -> jnp.ndarray:
"""
Generate a realistic elevation profile using fractal noise.
Args:
key: JAX random key
length: Length of the elevation profile
base_height: Base elevation level
height_variation: Maximum variation in height
octaves: Number of octaves for fractal noise
persistence: Persistence for fractal noise
scale: Scale of the noise pattern
Returns:
1D array of elevation values
"""
# Generate base terrain using fractal noise
noise = fractal_noise_1d(
key,
length,
octaves,
persistence,
scale,
height_variation
)
# Add base height and ensure non-negative elevation
elevation = base_height + noise
return jnp.maximum(elevation, 0.0)

View file

@ -1,9 +1,12 @@
import jax.numpy as jnp import jax.numpy as jnp
import jax
from jax import grad, jit, vmap, lax from jax import grad, jit, vmap, lax
from functools import partial from functools import partial
from typing import NamedTuple, Tuple from typing import NamedTuple, Tuple
from solarcarsim.noise import fractal_noise_1d, generate_elevation_profile, generate_wind_field
class MotorParams(NamedTuple): class MotorParams(NamedTuple):
kv: float kv: float
kt: float kt: float
@ -21,9 +24,11 @@ class CarParams(NamedTuple):
""" Physical Data for Solar Car Parameters """ """ Physical Data for Solar Car Parameters """
mass: float = 800 # kg mass: float = 800 # kg
frontal_area: float = 1.3 # m^2 frontal_area: float = 1.3 # m^2
drag_coeff: float = 0.018 # drag coefficient, dimensionless drag_coeff: float = 0.18 # drag coefficient, dimensionless
rolling_coeff: float = 0.002 # rolling resistance. rolling_coeff: float = 0.002 # rolling resistance.
moter_eff: float = 0.93 # 0 < x < 1 scaling factor moter_eff: float = 0.93 # 0 < x < 1 scaling factor
wheel_radius: float = 0.23 # wheel radius in meters
max_speed: float = 30.0 # m/s top speed
solar_area: float = 5.0 # m^2, typically 5.0 solar_area: float = 5.0 # m^2, typically 5.0
solar_eff: float = 0.20 # 0 < x < 1, typically ~.25 solar_eff: float = 0.20 # 0 < x < 1, typically ~.25
n_motors: int = 2 # how many motors we have. n_motors: int = 2 # how many motors we have.
@ -59,9 +64,9 @@ def drag_force(u, area, cd, rho):
# we can use those forces above to determine what forces we have to overcome. Sum(F)=0 # we can use those forces above to determine what forces we have to overcome. Sum(F)=0
@partial(jit, static_argnums=(3,4,5,6,7,)) # @partial(jit, static_argnums=(2,))
def bldc_power_draw(torque, velocity, resistance=0.1, kt=0.1, @jit
Cf=0.01, iron_loss_coeff=0.005): def bldc_power_draw(torque, velocity, params: MotorParams):
""" """
Approximates power draw of a BLDC motor outputting a torque at a given velocity Approximates power draw of a BLDC motor outputting a torque at a given velocity
@ -78,14 +83,14 @@ def bldc_power_draw(torque, velocity, resistance=0.1, kt=0.1,
""" """
# Current required for torque (simplified relationship) # Current required for torque (simplified relationship)
current = torque / kt current = torque / params.kt
# Copper losses (I²R) # Copper losses (I²R)
copper_losses = resistance * current**2 copper_losses = params.resistance * current**2
# Mechanical friction losses # Mechanical friction losses
friction_losses = Cf * velocity**2 friction_losses = params.friction_coeff * velocity**2
# Iron losses (simplified model - primarily dependent on speed) # Iron losses (simplified model - primarily dependent on speed)
iron_losses = iron_loss_coeff * velocity**2 iron_losses = params.iron_coeff * velocity**2
# Mechanical power output # Mechanical power output
mechanical_power = torque * velocity mechanical_power = torque * velocity
@ -94,7 +99,8 @@ def bldc_power_draw(torque, velocity, resistance=0.1, kt=0.1,
return total_power return total_power
@partial(jit, static_argnames=['resistance', 'kt', 'kv', 'vmax', 'Cf']) # @partial(jit, static_argnames=['resistance', 'kt', 'kv', 'vmax', 'Cf'])
@jit
def bldc_torque(velocity, current_limit, resistance, kt, kv, vmax, Cf): def bldc_torque(velocity, current_limit, resistance, kt, kv, vmax, Cf):
bemf = velocity / kv bemf = velocity / kv
@ -107,7 +113,7 @@ def bldc_torque(velocity, current_limit, resistance, kt, kv, vmax, Cf):
stall_torque = kt * current_limit stall_torque = kt * current_limit
return jnp.where(velocity < 0.01, stall_torque, net_torque) return jnp.where(velocity < 0.01, stall_torque, net_torque)
@partial(jit, static_argnums=(2,3,)) @partial(jit, static_argnums=(1,2,))
def battery_powerloss(current,cell_r, battery_shape: Tuple[int,int]): def battery_powerloss(current,cell_r, battery_shape: Tuple[int,int]):
r_array = jnp.full(battery_shape, cell_r) r_array = jnp.full(battery_shape, cell_r)
branch_current = current / battery_shape[1] branch_current = current / battery_shape[1]
@ -118,16 +124,83 @@ def battery_powerloss(current,cell_r, battery_shape: Tuple[int,int]):
def forward(state, timestep, control, params: CarParams): def forward(state, timestep, control, params: CarParams):
# state is (position, time, velocity, energy) # state is (position, time, energy)
# control is -1 to 1 (motor max current percent.) # control is velocity
# timestep is >0 time to advance # timestep is >0 time to advance
# params is the params dictionary. # params is the params dictionary.
# returns the next state with (position', time + timestep, velocity', energy') # returns the next state with (position', time + timestep, energy')
# TODO: terrain, weather, solar # TODO: terrain, weather, solar
# determine the forces acting on the car. # determine the forces acting on the car.
dragf = drag_force(state[2], params.frontal_area, params.drag_coeff, 1.184) dragf = drag_force(control, params.frontal_area, params.drag_coeff, 1.184)
rollf = rolling_force(params.mass, 0, params.rolling_coeff) rollf = rolling_force(params.mass, 0, params.rolling_coeff)
hillforce = downslope_force(params.mass, 0) hillforce = downslope_force(params.mass, 0)
totalf = dragf + rollf + hillforce
# determine the power needed to make this force
tau = params.wheel_radius * totalf
pdraw = bldc_power_draw(tau, control, params.motor)
net_power = 0 - pdraw # watts aka j/s
# TODO: calculate battery-based power losses.
# TODO: support regenerative braking when going downhill
# TODO: delta x = cos(theta) * velocity * timestep
new_state = jnp.array([state[0] + control * timestep, state[1] + timestep, state[2] + net_power * timestep])
return new_state
def make_environment(seed):
""" Generate a race environment: terrain function, wind function, wrapped forward function."""
key, subkey = jax.random.split(seed)
wind = generate_wind_field(subkey, 10000, 600, spatial_scale=1000)
key, subkey = jax.random.split(key)
slope = fractal_noise_1d(subkey, 10000, scale=1200, height_scale=0.08)
elevation = jnp.cumsum(slope)
# elevation = generate_elevation_profile(subkey, 10000, height_variation=40.0, scale=1200, octaves=5)
# slope = jnp.arctan(jnp.diff(elevation, prepend=100.0)) # rise/run
return wind, elevation, slope
@partial(jit, static_argnames=['params'])
def forwardv2(state, control, delta_time, wind, elevation, slope, params):
pos = jnp.astype(jnp.round(state[0]), "int32")
time = jnp.astype(jnp.round(state[1]), "int32")
theta = slope[pos]
velocity = control * params.max_speed
# sum up the forces acting on the car
dragf = drag_force(velocity, params.frontal_area, params.drag_coeff, 1.184)
rollf = rolling_force(params.mass, theta, params.rolling_coeff)
hillforce = downslope_force(params.mass, theta)
windf = wind[pos, time]
totalf = dragf + rollf + hillforce + windf
# with the sum of forces, determine the needed torque at the wheels, and then power
tau = params.wheel_radius * totalf
pdraw = bldc_power_draw(tau, velocity, params.motor)
# determine the energy needed to do this power for the time step
net_power = state[2] - delta_time * pdraw # joules
dpos = jnp.cos(theta) * velocity * delta_time
dist_remaining = 10000.0 - dpos
time_remaining = 600 - (state[1] + delta_time)
return jnp.array([dpos, state[1] + delta_time, net_power, dist_remaining, time_remaining])
def reward(state):
progress = state[0] / 10000 * 100
energy_usage = -10 * state[2]
time_factor = (1.0 - (state[1] / 600)) * 50
reward = progress + energy_usage + time_factor
return reward
# now we have an environment tuned in.
# we want to take an environment, and bind it to the forward function
def make_simulator(params: CarParams, wind, elevation, slope):
def reward(state):
progress = state[0] / 10000 * 100
energy_usage = -10 * state[2]
time_factor = (1.0 - (state[1] / 600)) * 50
reward = progress + energy_usage + time_factor
return reward
return forwardv2, reward
pass