etude-sdk 0.1.0__py3-none-any.whl

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 (64) hide show
  1. etude/__init__.py +0 -0
  2. etude/__main__.py +5 -0
  3. etude/_package/pyproject.toml +62 -0
  4. etude/_package/uv.lock +1213 -0
  5. etude/cli.py +85 -0
  6. etude/launch/__init__.py +0 -0
  7. etude/launch/cli.py +591 -0
  8. etude/launch/client.py +178 -0
  9. etude/launch/commands.py +25 -0
  10. etude/launch/controller.py +488 -0
  11. etude/launch/database.py +777 -0
  12. etude/launch/environment.py +50 -0
  13. etude/launch/errors.py +2 -0
  14. etude/launch/executor.py +168 -0
  15. etude/launch/job_file.py +107 -0
  16. etude/launch/listing.py +92 -0
  17. etude/launch/machines.py +83 -0
  18. etude/launch/measurement.py +49 -0
  19. etude/launch/providers/__init__.py +0 -0
  20. etude/launch/providers/cleanup.py +10 -0
  21. etude/launch/providers/package.py +49 -0
  22. etude/launch/providers/runpod/__init__.py +0 -0
  23. etude/launch/providers/runpod/api.py +189 -0
  24. etude/launch/providers/runpod/http.py +78 -0
  25. etude/launch/providers/runpod/machines.py +160 -0
  26. etude/launch/providers/runpod/pod.py +179 -0
  27. etude/launch/records.py +378 -0
  28. etude/launch/scheduler.py +1455 -0
  29. etude/launch/schemas.py +143 -0
  30. etude/launch/source.py +321 -0
  31. etude/launch/ssh.py +283 -0
  32. etude/launch/startup.py +47 -0
  33. etude/launch/storage/__init__.py +0 -0
  34. etude/launch/storage/bucket.py +234 -0
  35. etude/launch/storage/disk.py +186 -0
  36. etude/launch/storage/files.py +32 -0
  37. etude/launch/storage/s3.py +433 -0
  38. etude/launch/worker/__init__.py +0 -0
  39. etude/launch/worker/attempts.py +248 -0
  40. etude/launch/worker/courier.py +319 -0
  41. etude/launch/worker/main.py +26 -0
  42. etude/launch/worker/remote.py +112 -0
  43. etude/py.typed +0 -0
  44. etude/track/__init__.py +0 -0
  45. etude/track/block.py +462 -0
  46. etude/track/block_file.py +59 -0
  47. etude/track/cli.py +135 -0
  48. etude/track/errors.py +10 -0
  49. etude/track/manifest.py +185 -0
  50. etude/track/read.py +658 -0
  51. etude/track/records.py +297 -0
  52. etude/track/report.html +363 -0
  53. etude/track/report.py +224 -0
  54. etude/track/run.py +1101 -0
  55. etude/track/serve.py +73 -0
  56. etude/track/storage.py +191 -0
  57. etude/track/vendor/UPLOT_LICENSE +21 -0
  58. etude/track/vendor/uPlot.iife.min.js +2 -0
  59. etude/track/vendor/uPlot.min.css +1 -0
  60. etude_sdk-0.1.0.dist-info/METADATA +83 -0
  61. etude_sdk-0.1.0.dist-info/RECORD +64 -0
  62. etude_sdk-0.1.0.dist-info/WHEEL +4 -0
  63. etude_sdk-0.1.0.dist-info/entry_points.txt +2 -0
  64. etude_sdk-0.1.0.dist-info/licenses/LICENSE +21 -0
etude/__init__.py ADDED
File without changes
etude/__main__.py ADDED
@@ -0,0 +1,5 @@
1
+ """`python -m etude` is the `etude` command."""
2
+
3
+ from etude.cli import main
4
+
5
+ raise SystemExit(main())
@@ -0,0 +1,62 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "etude-sdk"
7
+ version = "0.1.0"
8
+ description = "Launch training runs on your own or rented machines and track what they record"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.12"
12
+ dependencies = [
13
+ "numpy>=1.26,<3",
14
+ "pydantic>=2.12,<3",
15
+ "typer>=0.27,<1",
16
+ ]
17
+
18
+ [project.urls]
19
+ Repository = "https://github.com/loopflowstudio/etude"
20
+
21
+ [project.optional-dependencies]
22
+ s3 = ["boto3>=1.35,<2"]
23
+
24
+ [project.scripts]
25
+ etude = "etude.cli:main"
26
+
27
+ [tool.hatch.build.targets.wheel]
28
+ packages = ["src/etude"]
29
+
30
+ [dependency-groups]
31
+ dev = ["pytest>=8,<10", "mypy>=1.15,<2", "ruff>=0.11,<1", "moto[s3]>=5,<6"]
32
+
33
+ [tool.mypy]
34
+ python_version = "3.12"
35
+ strict = true
36
+ files = ["src", "tests"]
37
+
38
+ [tool.pytest.ini_options]
39
+ testpaths = ["tests"]
40
+ addopts = '-m "not scale"'
41
+ markers = ["scale: opt-in counting workloads at 10, 100 and 1000 workers"]
42
+
43
+ [tool.ruff]
44
+ target-version = "py312"
45
+ line-length = 100
46
+
47
+ [tool.ruff.lint]
48
+ select = ["E4", "E7", "E9", "F", "I", "UP", "TID252", "PLC0415"]
49
+
50
+ [tool.ruff.lint.flake8-tidy-imports]
51
+ # Every import names its module in full, so a reader never has to work out where it is.
52
+ ban-relative-imports = "all"
53
+
54
+ [tool.hatch.build.targets.wheel.force-include]
55
+ "pyproject.toml" = "etude/_package/pyproject.toml"
56
+ "uv.lock" = "etude/_package/uv.lock"
57
+
58
+ [tool.ruff.lint.per-file-ignores]
59
+ # AGENTS.md: entry points load only the command being invoked.
60
+ "src/etude/cli.py" = ["PLC0415"]
61
+ "src/etude/launch/cli.py" = ["PLC0415"]
62
+ "src/etude/track/cli.py" = ["PLC0415"]