get things going kinda
This commit is contained in:
parent
7a8fbda82c
commit
104dfab637
File diff suppressed because one or more lines are too long
818
pdm.lock
818
pdm.lock
|
@ -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"},
|
||||||
|
]
|
||||||
|
|
|
@ -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"}
|
||||||
|
|
|
@ -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
0
src/solarcarsim/main.py
Normal file
343
src/solarcarsim/noise.py
Normal file
343
src/solarcarsim/noise.py
Normal 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)
|
|
@ -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
|
|
||||||
|
|
Loading…
Reference in a new issue