simulo 0.28.1__tar.gz → 0.28.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {simulo-0.28.1/src/simulo.egg-info → simulo-0.28.3}/PKG-INFO +7 -7
  2. {simulo-0.28.1 → simulo-0.28.3}/PYPI.md +4 -5
  3. {simulo-0.28.1 → simulo-0.28.3}/pyproject.toml +3 -2
  4. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/asset_package.py +6 -0
  5. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/cli.py +92 -11
  6. {simulo-0.28.1 → simulo-0.28.3/src/simulo.egg-info}/PKG-INFO +7 -7
  7. {simulo-0.28.1 → simulo-0.28.3}/src/simulo.egg-info/requires.txt +1 -1
  8. {simulo-0.28.1 → simulo-0.28.3}/MANIFEST.in +0 -0
  9. {simulo-0.28.1 → simulo-0.28.3}/setup.cfg +0 -0
  10. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/__init__.py +0 -0
  11. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/__init__.py +0 -0
  12. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/_entrypoint.py +0 -0
  13. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/_mounts.py +0 -0
  14. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/_runner.py +0 -0
  15. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/_secure_downloads.py +0 -0
  16. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/app.py +0 -0
  17. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/asset.py +0 -0
  18. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/asset_api.py +0 -0
  19. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/asset_pins.py +0 -0
  20. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/builtin_aliases.py +0 -0
  21. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/bundle.py +0 -0
  22. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/cancel_api.py +0 -0
  23. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/config.py +0 -0
  24. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/credentials.py +0 -0
  25. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/discovery.py +0 -0
  26. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/export_api.py +0 -0
  27. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/export_bundle.py +0 -0
  28. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/facades.py +0 -0
  29. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/http.py +0 -0
  30. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/identity_api.py +0 -0
  31. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/install_samples.py +0 -0
  32. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/jobs_api.py +0 -0
  33. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/learning.py +0 -0
  34. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/login.py +0 -0
  35. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/mode.py +0 -0
  36. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/outputs.py +0 -0
  37. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/packaging.py +0 -0
  38. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/preflight_api.py +0 -0
  39. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/preflight_render.py +0 -0
  40. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/registry.py +0 -0
  41. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/runtime.py +0 -0
  42. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/runtime_display.py +0 -0
  43. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/seed_ref.py +0 -0
  44. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/stub.py +0 -0
  45. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/submit_api.py +0 -0
  46. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/__init__.py +0 -0
  47. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/inference/app.py.tmpl +0 -0
  48. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/inference/simuloignore.tmpl +0 -0
  49. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/scenario/app.py.tmpl +0 -0
  50. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/scenario/simuloignore.tmpl +0 -0
  51. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/training/app.py.tmpl +0 -0
  52. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/templates/training/simuloignore.tmpl +0 -0
  53. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/view_fragment.py +0 -0
  54. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/view_session_api.py +0 -0
  55. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/_client/volume.py +0 -0
  56. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/callbacks.py +0 -0
  57. {simulo-0.28.1 → simulo-0.28.3}/src/simulo/py.typed +0 -0
  58. {simulo-0.28.1 → simulo-0.28.3}/src/simulo.egg-info/SOURCES.txt +0 -0
  59. {simulo-0.28.1 → simulo-0.28.3}/src/simulo.egg-info/dependency_links.txt +0 -0
  60. {simulo-0.28.1 → simulo-0.28.3}/src/simulo.egg-info/entry_points.txt +0 -0
  61. {simulo-0.28.1 → simulo-0.28.3}/src/simulo.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo
3
- Version: 0.28.1
3
+ Version: 0.28.3
4
4
  Summary: Python SDK and CLI for cloud-native robotics simulation, reinforcement learning, and robot policy training on managed GPUs.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -8,6 +8,7 @@ Project-URL: Homepage, https://simulo.ai
8
8
  Project-URL: Documentation, https://docs.simulo.ai
9
9
  Project-URL: Quickstart, https://docs.simulo.ai/getting-started/quickstart/
10
10
  Project-URL: Examples, https://github.com/simulo-org/simulo-samples
11
+ Project-URL: Console, https://console.simulo.ai
11
12
  Keywords: simulo,robotics,robotics simulation,robot training,robot learning,reinforcement learning,cloud robotics,cloud simulation,GPU simulation,policy training,physical AI,embodied AI,NVIDIA Isaac Sim,Isaac Lab,OpenUSD,USD,URDF,ONNX,MCAP,Python SDK
12
13
  Classifier: Development Status :: 3 - Alpha
13
14
  Classifier: Environment :: Console
@@ -30,7 +31,7 @@ Classifier: Topic :: System :: Distributed Computing
30
31
  Classifier: Typing :: Typed
31
32
  Requires-Python: >=3.11
32
33
  Description-Content-Type: text/markdown
33
- Requires-Dist: simulo-interfaces<0.21,>=0.20.1
34
+ Requires-Dist: simulo-interfaces<0.21,>=0.20.2
34
35
  Requires-Dist: mcap<2,>=1.3
35
36
  Requires-Dist: defusedxml>=0.7.1
36
37
  Requires-Dist: usd-core<27,>=26.5
@@ -64,9 +65,9 @@ handles managed GPU execution, reproducible packaging, versioned assets,
64
65
  checkpoints, trained models, recordings, and live 3D viewing.
65
66
 
66
67
  The package installed on your computer is torch-free and requires no local GPU or
67
- simulator. The managed runtime currently uses NVIDIA Isaac Sim and Isaac Lab to
68
- execute reinforcement-learning training, policy evaluation and inference, and
69
- scripted robotics simulations.
68
+ simulator. The managed runtime executes reinforcement-learning training, policy
69
+ evaluation and inference, and scripted robotics simulations on managed GPUs in
70
+ the cloud.
70
71
 
71
72
  ## What you can do
72
73
 
@@ -105,8 +106,7 @@ and pins its assets, submits the job, and follows its cloud logs.
105
106
  The public [Simulo samples repository](https://github.com/simulo-org/simulo-samples)
106
107
  contains projects for cartpole, humanoid locomotion, JetBot navigation, Franka
107
108
  arm control, a bring-your-own URDF arm, and F1TENTH-compatible drift training.
108
- Its current published compatibility contract is `simulo>=0.26.0,<0.27`. Check
109
- the repository README for the supported SDK range before running a checkout.
109
+ See the repository README for setup and usage.
110
110
 
111
111
  ## Monitor jobs and retrieve artifacts
112
112
 
@@ -9,9 +9,9 @@ handles managed GPU execution, reproducible packaging, versioned assets,
9
9
  checkpoints, trained models, recordings, and live 3D viewing.
10
10
 
11
11
  The package installed on your computer is torch-free and requires no local GPU or
12
- simulator. The managed runtime currently uses NVIDIA Isaac Sim and Isaac Lab to
13
- execute reinforcement-learning training, policy evaluation and inference, and
14
- scripted robotics simulations.
12
+ simulator. The managed runtime executes reinforcement-learning training, policy
13
+ evaluation and inference, and scripted robotics simulations on managed GPUs in
14
+ the cloud.
15
15
 
16
16
  ## What you can do
17
17
 
@@ -50,8 +50,7 @@ and pins its assets, submits the job, and follows its cloud logs.
50
50
  The public [Simulo samples repository](https://github.com/simulo-org/simulo-samples)
51
51
  contains projects for cartpole, humanoid locomotion, JetBot navigation, Franka
52
52
  arm control, a bring-your-own URDF arm, and F1TENTH-compatible drift training.
53
- Its current published compatibility contract is `simulo>=0.26.0,<0.27`. Check
54
- the repository README for the supported SDK range before running a checkout.
53
+ See the repository README for setup and usage.
55
54
 
56
55
  ## Monitor jobs and retrieve artifacts
57
56
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simulo"
7
- version = "0.28.1"
7
+ version = "0.28.3"
8
8
  description = "Python SDK and CLI for cloud-native robotics simulation, reinforcement learning, and robot policy training on managed GPUs."
9
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.11"
@@ -59,7 +59,7 @@ classifiers = [
59
59
  # mcap: used by `simulo recordings` to read back a downloaded recording and
60
60
  # verify it (message count) — MIT-licensed, deps only lz4+zstandard.
61
61
  dependencies = [
62
- "simulo-interfaces>=0.20.1,<0.21",
62
+ "simulo-interfaces>=0.20.2,<0.21",
63
63
  "mcap>=1.3,<2",
64
64
  # Hardened XML parsing for URDF ingestion (USD Asset Catalogs, PR-12 fix
65
65
  # loop 2, security NIT): stdlib xml.etree.ElementTree relies on
@@ -138,6 +138,7 @@ Homepage = "https://simulo.ai"
138
138
  Documentation = "https://docs.simulo.ai"
139
139
  Quickstart = "https://docs.simulo.ai/getting-started/quickstart/"
140
140
  Examples = "https://github.com/simulo-org/simulo-samples"
141
+ Console = "https://console.simulo.ai"
141
142
 
142
143
  # Namespace packaging: this is the only distribution that ships
143
144
  # `src/simulo/__init__.py`, so sibling `simulo.*` distributions can share the
@@ -82,6 +82,10 @@ from simulo.interfaces.platform.asset_catalog import (
82
82
  #: recipe can never silently collide with today's identities.
83
83
  _CONTENT_DIGEST_SCHEMA = "simulo.asset_content.v1"
84
84
 
85
+ #: Local-cache metadata written after extraction. Like the backend validator,
86
+ #: the packager excludes this exact name only at the package root.
87
+ _ASSET_CACHE_SIDECAR_FILENAME = "simulo.asset.json"
88
+
85
89
  #: USD layer suffixes the inspector parses for references. ``.usdz`` is a
86
90
  #: sealed package — included as an opaque file, valid as an entry only when
87
91
  #: named explicitly via ``--entry`` (never auto-detected).
@@ -516,6 +520,8 @@ def _collect_tree_files(root: Path) -> list[tuple[str, Path]]:
516
520
  if abspath.is_symlink():
517
521
  continue
518
522
  rel = PurePosixPath(abspath.relative_to(root).as_posix())
523
+ if str(rel) == _ASSET_CACHE_SIDECAR_FILENAME:
524
+ continue
519
525
  collected.append((str(rel), abspath))
520
526
  collected.sort(key=lambda item: item[0])
521
527
  return collected
@@ -578,12 +578,14 @@ _CANCELLED_STATUS = str(JobStatus.CANCELLED)
578
578
  #: ``status_reason``/``status_detail``): a failed, cancelled, or timed-out
579
579
  #: job. A cleanly ``completed`` job has none.
580
580
  #:
581
- #: ``timed_out`` (`M55-org-runtime-policy`) is added here even though the
582
- #: control plane still projects a stored ``timed_out`` job as ``failed`` on
583
- #: every read route today (see that milestone's PR description) — this set
584
- #: must already be correct for the moment that projection lifts, not
585
- #: rewritten again at that later date to add the one value its own author
586
- #: had every reason to add now, while this exact line is open.
581
+ #: ``timed_out`` (`M55-org-runtime-policy`) was added here even before the
582
+ #: control plane's read-side compat projection was lifted (issue #1537,
583
+ #: lifted 2026-09-12) — this set had to already be correct for the moment
584
+ #: that projection lifted, not rewritten again at that later date to add
585
+ #: the one value its own author had every reason to add while this exact
586
+ #: line was open. That moment has now passed: every read route serves a
587
+ #: genuinely ``timed_out`` job as ``timed_out``, and this set already
588
+ #: covered it.
587
589
  _FAILURE_STATUS_STRINGS = frozenset({str(JobStatus.FAILED), str(JobStatus.CANCELLED), str(JobStatus.TIMED_OUT)})
588
590
 
589
591
  #: The tolerant-client check for ``simulo view`` specifically
@@ -7220,6 +7222,11 @@ def _cmd_systems(args: argparse.Namespace) -> int:
7220
7222
  #: not by any prose document.
7221
7223
  ASSET_CACHE_ROOT = Path.home() / ".simulo" / "assets"
7222
7224
 
7225
+ #: Sidecar consumed by ``simulo-backend`` when a cached asset path names a
7226
+ #: directory rather than the loadable file inside it. Kept private because the
7227
+ #: thin client must not import the backend package just to share this filename.
7228
+ _ASSET_SIDECAR_FILENAME = "simulo.asset.json"
7229
+
7223
7230
  #: Conservative Windows ``MAX_PATH`` guard (260 chars, minus 1) applied to
7224
7231
  #: every extracted cache path — a defensive REFUSAL, not a guarantee: a
7225
7232
  #: legitimately deep USD tree can still need Windows long-path support
@@ -7348,7 +7355,7 @@ def _validate_asset_archive_member(member: tarfile.TarInfo, dest_root: Path) ->
7348
7355
  return resolved, None
7349
7356
 
7350
7357
 
7351
- def _extract_asset_archive(tar_path: Path, dest_dir: Path) -> None:
7358
+ def _extract_asset_archive(tar_path: Path, dest_dir: Path, *, entry_path: Optional[str] = None) -> Optional[str]:
7352
7359
  """Safely extract *tar_path* (a digest-verified asset archive) into
7353
7360
  *dest_dir* — member-by-member, never ``TarFile.extractall``. This
7354
7361
  function IS the safety filter ``extractall``'s ``filter=`` parameter
@@ -7361,8 +7368,12 @@ def _extract_asset_archive(tar_path: Path, dest_dir: Path) -> None:
7361
7368
  single unsafe member aborts the whole extraction with nothing written,
7362
7369
  never a partial mix of safe and unsafe content.
7363
7370
 
7364
- Raises :class:`AssetExtractionError` on any unsafe/malformed member, a
7365
- non-tar file, or a local filesystem failure.
7371
+ When *entry_path* is provided, it must name one of the archive's regular
7372
+ files through the same containment check as every member. The normalized
7373
+ package-relative path is returned for the platform sidecar.
7374
+
7375
+ Raises :class:`AssetExtractionError` on any unsafe/malformed member or
7376
+ entry, a non-tar file, or a local filesystem failure.
7366
7377
  """
7367
7378
  dest_dir.mkdir(parents=True, exist_ok=True)
7368
7379
  dest_root = dest_dir.resolve()
@@ -7376,6 +7387,20 @@ def _extract_asset_archive(tar_path: Path, dest_dir: Path) -> None:
7376
7387
  f"Refusing to extract {member.name!r}: {reason}. Nothing was written for this asset."
7377
7388
  )
7378
7389
  planned.append((member, target))
7390
+ entry_target: Optional[Path] = None
7391
+ if entry_path is not None:
7392
+ entry_member = tarfile.TarInfo(entry_path)
7393
+ entry_member.type = tarfile.REGTYPE
7394
+ entry_target, reason = _validate_asset_archive_member(entry_member, dest_root)
7395
+ if entry_target is None:
7396
+ raise AssetExtractionError(
7397
+ f"Refusing asset entry path {entry_path!r}: {reason}. Nothing was written for this asset."
7398
+ )
7399
+ if not any(member.isfile() and target == entry_target for member, target in planned):
7400
+ raise AssetExtractionError(
7401
+ f"Refusing asset entry path {entry_path!r}: it does not name a regular file in the "
7402
+ "downloaded archive. Nothing was written for this asset."
7403
+ )
7379
7404
  for member, target in planned:
7380
7405
  if member.isdir():
7381
7406
  target.mkdir(parents=True, exist_ok=True)
@@ -7386,10 +7411,50 @@ def _extract_asset_archive(tar_path: Path, dest_dir: Path) -> None:
7386
7411
  raise AssetExtractionError(f"Archive member {member.name!r} has no readable content.")
7387
7412
  with src, open(target, "wb") as dst:
7388
7413
  shutil.copyfileobj(src, dst)
7414
+ if entry_target is not None:
7415
+ return entry_target.relative_to(dest_root).as_posix()
7389
7416
  except tarfile.TarError as exc:
7390
7417
  raise AssetExtractionError(f"The downloaded archive is not a valid tar file: {exc}") from exc
7391
7418
  except OSError as exc:
7392
7419
  raise AssetExtractionError(f"Could not write the extracted asset to {dest_dir}: {exc}") from exc
7420
+ return None
7421
+
7422
+
7423
+ def _write_asset_cache_sidecar(dest_dir: Path, *, uri: str, entry: str, kind: str, archive_sha256: str) -> None:
7424
+ """Write the backend-compatible entry record after trusted extraction."""
7425
+ sidecar = {
7426
+ "uri": uri,
7427
+ "entry": entry,
7428
+ "kind": kind,
7429
+ "digest": f"sha256:{archive_sha256}",
7430
+ }
7431
+ temp_path: Optional[Path] = None
7432
+ try:
7433
+ dest_root = dest_dir.resolve()
7434
+ with tempfile.NamedTemporaryFile(
7435
+ mode="w",
7436
+ encoding="utf-8",
7437
+ dir=dest_root,
7438
+ prefix=f".{_ASSET_SIDECAR_FILENAME}.",
7439
+ delete=False,
7440
+ ) as temp_file:
7441
+ temp_path = Path(temp_file.name)
7442
+ temp_file.write(json.dumps(sidecar, indent=2) + "\n")
7443
+ # NamedTemporaryFile creates the file owner-only (0600). Give the
7444
+ # record the permissions a plain write would get, so anything that
7445
+ # reads the cache as another user keeps working.
7446
+ if hasattr(os, "fchmod"):
7447
+ current_umask = os.umask(0)
7448
+ os.umask(current_umask)
7449
+ os.fchmod(temp_file.fileno(), 0o666 & ~current_umask)
7450
+ os.replace(temp_path, dest_root / _ASSET_SIDECAR_FILENAME)
7451
+ except OSError as exc:
7452
+ if temp_path is not None:
7453
+ try:
7454
+ temp_path.unlink(missing_ok=True)
7455
+ except OSError:
7456
+ pass
7457
+ raise AssetExtractionError(f"Could not write the asset entry record in {dest_dir}: {exc}") from exc
7393
7458
 
7394
7459
 
7395
7460
  #: Statuses an ``AssetVersionSummary`` can carry while it is still mid-pipeline
@@ -8002,6 +8067,13 @@ def _asset_get_impl(args: argparse.Namespace) -> int:
8002
8067
  expected_sha256 = str(target.get("archive_sha256") or "").lower().removeprefix("sha256:")
8003
8068
  display_ref = f"{parsed.kind}/{parsed.name}:v{version_number}"
8004
8069
 
8070
+ if not entry_path:
8071
+ raise AssetExtractionError(f"{display_ref} has no loadable entry path. Nothing was written.")
8072
+ if "\x00" in entry_path:
8073
+ raise AssetExtractionError(
8074
+ f"Refusing asset entry path {entry_path!r}: NUL characters are refused. Nothing was written for this asset."
8075
+ )
8076
+
8005
8077
  # SECURITY (LOW, PR-8 trio review): a downloadable version with NO
8006
8078
  # recorded digest is refused outright, before any network call — the
8007
8079
  # earlier code treated a missing `archive_sha256` as "skip verification"
@@ -8036,9 +8108,18 @@ def _asset_get_impl(args: argparse.Namespace) -> int:
8036
8108
  with tempfile.TemporaryDirectory(prefix="simulo-asset-get-") as tmp_dir:
8037
8109
  tar_path = Path(tmp_dir) / "package.tar"
8038
8110
  tar_path.write_bytes(data)
8039
- _extract_asset_archive(tar_path, dest_dir)
8111
+ safe_entry_path = _extract_asset_archive(tar_path, dest_dir, entry_path=entry_path)
8112
+ if safe_entry_path is None:
8113
+ raise AssetExtractionError(f"{display_ref} has no loadable entry path. Nothing was written.")
8114
+ _write_asset_cache_sidecar(
8115
+ dest_dir,
8116
+ uri=f"{publisher}/{display_ref}",
8117
+ entry=safe_entry_path,
8118
+ kind=parsed.kind,
8119
+ archive_sha256=actual_sha256,
8120
+ )
8040
8121
 
8041
- echo(f"Downloaded to {dest_dir}/ (entry: {entry_path or '?'})")
8122
+ echo(f"Downloaded to {dest_dir}/ (entry: {sanitize_server_text(entry_path)})")
8042
8123
  if args.json:
8043
8124
  print(
8044
8125
  json.dumps(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo
3
- Version: 0.28.1
3
+ Version: 0.28.3
4
4
  Summary: Python SDK and CLI for cloud-native robotics simulation, reinforcement learning, and robot policy training on managed GPUs.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -8,6 +8,7 @@ Project-URL: Homepage, https://simulo.ai
8
8
  Project-URL: Documentation, https://docs.simulo.ai
9
9
  Project-URL: Quickstart, https://docs.simulo.ai/getting-started/quickstart/
10
10
  Project-URL: Examples, https://github.com/simulo-org/simulo-samples
11
+ Project-URL: Console, https://console.simulo.ai
11
12
  Keywords: simulo,robotics,robotics simulation,robot training,robot learning,reinforcement learning,cloud robotics,cloud simulation,GPU simulation,policy training,physical AI,embodied AI,NVIDIA Isaac Sim,Isaac Lab,OpenUSD,USD,URDF,ONNX,MCAP,Python SDK
12
13
  Classifier: Development Status :: 3 - Alpha
13
14
  Classifier: Environment :: Console
@@ -30,7 +31,7 @@ Classifier: Topic :: System :: Distributed Computing
30
31
  Classifier: Typing :: Typed
31
32
  Requires-Python: >=3.11
32
33
  Description-Content-Type: text/markdown
33
- Requires-Dist: simulo-interfaces<0.21,>=0.20.1
34
+ Requires-Dist: simulo-interfaces<0.21,>=0.20.2
34
35
  Requires-Dist: mcap<2,>=1.3
35
36
  Requires-Dist: defusedxml>=0.7.1
36
37
  Requires-Dist: usd-core<27,>=26.5
@@ -64,9 +65,9 @@ handles managed GPU execution, reproducible packaging, versioned assets,
64
65
  checkpoints, trained models, recordings, and live 3D viewing.
65
66
 
66
67
  The package installed on your computer is torch-free and requires no local GPU or
67
- simulator. The managed runtime currently uses NVIDIA Isaac Sim and Isaac Lab to
68
- execute reinforcement-learning training, policy evaluation and inference, and
69
- scripted robotics simulations.
68
+ simulator. The managed runtime executes reinforcement-learning training, policy
69
+ evaluation and inference, and scripted robotics simulations on managed GPUs in
70
+ the cloud.
70
71
 
71
72
  ## What you can do
72
73
 
@@ -105,8 +106,7 @@ and pins its assets, submits the job, and follows its cloud logs.
105
106
  The public [Simulo samples repository](https://github.com/simulo-org/simulo-samples)
106
107
  contains projects for cartpole, humanoid locomotion, JetBot navigation, Franka
107
108
  arm control, a bring-your-own URDF arm, and F1TENTH-compatible drift training.
108
- Its current published compatibility contract is `simulo>=0.26.0,<0.27`. Check
109
- the repository README for the supported SDK range before running a checkout.
109
+ See the repository README for setup and usage.
110
110
 
111
111
  ## Monitor jobs and retrieve artifacts
112
112
 
@@ -1,4 +1,4 @@
1
- simulo-interfaces<0.21,>=0.20.1
1
+ simulo-interfaces<0.21,>=0.20.2
2
2
  mcap<2,>=1.3
3
3
  defusedxml>=0.7.1
4
4
  usd-core<27,>=26.5
File without changes
File without changes
File without changes
File without changes
File without changes