gpu-dev 0.7.13__tar.gz → 0.7.14__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 (235) hide show
  1. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/PKG-INFO +1 -1
  2. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/cli.py +44 -17
  3. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/PKG-INFO +1 -1
  4. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/pyproject.toml +1 -1
  5. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_repro.py +20 -7
  6. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/.github/workflows/no-gitlinks.yml +0 -0
  7. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/.github/workflows/publish.yml +0 -0
  8. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/.github/workflows/tests.yml +0 -0
  9. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/.gitignore +0 -0
  10. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/CLAUDE.md +0 -0
  11. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/README.md +0 -0
  12. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/admin/README.md +0 -0
  13. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/admin/generate_stats.py +0 -0
  14. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/admin/requirements.txt +0 -0
  15. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/README.md +0 -0
  16. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/ZERO_CONFIG_SETUP.md +0 -0
  17. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/__init__.py +0 -0
  18. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/auth.py +0 -0
  19. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/config.py +0 -0
  20. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/disks.py +0 -0
  21. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/interactive.py +0 -0
  22. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/name_generator.py +0 -0
  23. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/reservations.py +0 -0
  24. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/gpu_dev_cli/ssh_proxy.py +0 -0
  25. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/gpu-dev-cli/minimal-iam-policy.json +0 -0
  26. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/cli-tools/scripts/clear_stale_disk_locks.py +0 -0
  27. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/conftest.py +0 -0
  28. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/FAST_REPRO_DESIGN.md +0 -0
  29. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/GPU_DEV_SUBMIT.md +0 -0
  30. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/SDK_REPRO.md +0 -0
  31. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/USER_GUIDE.md +0 -0
  32. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/devgpu-features.html +0 -0
  33. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/docker-mark-blue.svg +0 -0
  34. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/docs/icons8-cursor-ai.svg +0 -0
  35. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/SOURCES.txt +0 -0
  36. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/dependency_links.txt +0 -0
  37. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/entry_points.txt +0 -0
  38. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/requires.txt +0 -0
  39. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/gpu_dev.egg-info/top_level.txt +0 -0
  40. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/post-may-2026.md +0 -0
  41. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/CLAUDE.md +0 -0
  42. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/architecture.html +0 -0
  43. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/cli-demo.html +0 -0
  44. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/devgpu-features.html +0 -0
  45. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/docker-mark-blue.svg +0 -0
  46. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/feedback.png +0 -0
  47. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/gpu-fleet.html +0 -0
  48. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/icons8-cursor-ai.svg +0 -0
  49. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/index.html +0 -0
  50. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/k8s-under-the-hood.html +0 -0
  51. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/multinode.html +0 -0
  52. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/osdc-future-plans.html +0 -0
  53. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/problem.png +0 -0
  54. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/pyproject.toml +0 -0
  55. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/sandbox.html +0 -0
  56. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/sdk-demo.html +0 -0
  57. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/teaser.html +0 -0
  58. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/thesis.html +0 -0
  59. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/title-vid.mp4 +0 -0
  60. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/weneedgpus.png +0 -0
  61. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/presentation/wow.html +0 -0
  62. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/README.md +0 -0
  63. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/batch_multi_gpu.py +0 -0
  64. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/interactive_debug.py +0 -0
  65. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/parallel_experiments.ipynb +0 -0
  66. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/quickstart.ipynb +0 -0
  67. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/run_tests.py +0 -0
  68. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/examples/submit_job.py +0 -0
  69. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/__init__.py +0 -0
  70. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_async/__init__.py +0 -0
  71. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_backend/__init__.py +0 -0
  72. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_backend/aws.py +0 -0
  73. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_backend/protocol.py +0 -0
  74. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_sync/__init__.py +0 -0
  75. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_sync/client.py +0 -0
  76. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_sync/sandbox.py +0 -0
  77. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_transport/__init__.py +0 -0
  78. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/_transport/ssh.py +0 -0
  79. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/common/__init__.py +0 -0
  80. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/common/config.py +0 -0
  81. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/common/enums.py +0 -0
  82. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/common/errors.py +0 -0
  83. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/common/models.py +0 -0
  84. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/src/gpu_dev/py.typed +0 -0
  85. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/sdk/python/tests/test_models.py +0 -0
  86. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/setup.cfg +0 -0
  87. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-deck/backend.tf +0 -0
  88. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-deck/main.tf +0 -0
  89. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-deck/terraform.tfvars.example +0 -0
  90. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/.claude/skills/deploy.md +0 -0
  91. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/.terraform.lock.hcl +0 -0
  92. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/README.md +0 -0
  93. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/alb.tf +0 -0
  94. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ami-baker.tf +0 -0
  95. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/availability.tf +0 -0
  96. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/backend.tf +0 -0
  97. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/build-node.tf +0 -0
  98. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/check_b200.py +0 -0
  99. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/cluster-autoscaler.tf +0 -0
  100. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/cmd_proxy.py +0 -0
  101. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/.dockerignore +0 -0
  102. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/Dockerfile +0 -0
  103. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/backup-dotfiles +0 -0
  104. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/bash_profile +0 -0
  105. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/bashrc +0 -0
  106. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/bashrc_ext +0 -0
  107. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/build-with-efa.sh +0 -0
  108. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/dotfiles-shutdown-handler +0 -0
  109. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/list-dotfile-versions +0 -0
  110. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/motd_script +0 -0
  111. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/nproc_wrapper +0 -0
  112. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/profile +0 -0
  113. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/restore-dotfiles +0 -0
  114. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/restore-dotfiles-version +0 -0
  115. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/setup-dotfiles-persistence +0 -0
  116. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/shell_env +0 -0
  117. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/ssh_config +0 -0
  118. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/zprofile +0 -0
  119. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/zshrc +0 -0
  120. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker/zshrc_ext +0 -0
  121. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker-build.tf +0 -0
  122. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker-example/Dockerfile +0 -0
  123. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/docker-example/hello.txt +0 -0
  124. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ecr.tf +0 -0
  125. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/efs.tf +0 -0
  126. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/eks.tf +0 -0
  127. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/expiry.tf +0 -0
  128. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/git-cache.tf +0 -0
  129. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/gpu-dev-pod-irsa.tf +0 -0
  130. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/kubernetes.tf +0 -0
  131. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/availability_updater/index.py +0 -0
  132. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/availability_updater/requirements.txt +0 -0
  133. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/migration/tag_largest_snapshots.py +0 -0
  134. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/reservation_expiry/index.py +0 -0
  135. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/reservation_expiry/requirements.txt +0 -0
  136. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/reservation_processor/buildkit_job.py +0 -0
  137. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/reservation_processor/index.py +0 -0
  138. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/reservation_processor/requirements.txt +0 -0
  139. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/__init__.py +0 -0
  140. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/alb_utils.py +0 -0
  141. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/dns_utils.py +0 -0
  142. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/k8s_client.py +0 -0
  143. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/k8s_resource_tracker.py +0 -0
  144. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/requirements.txt +0 -0
  145. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda/shared/snapshot_utils.py +0 -0
  146. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/lambda.tf +0 -0
  147. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/list_b200.py +0 -0
  148. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/main.tf +0 -0
  149. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/mig-config.tf +0 -0
  150. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/mig-parted-config.yaml +0 -0
  151. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/migrations/backfill_snapshot_contents.py +0 -0
  152. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/migrations/backfill_snapshot_contents.py.bak +0 -0
  153. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/migrations/check_snapshots.py +0 -0
  154. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/migrations/migrate_disks_to_named.py +0 -0
  155. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/migrations/run_backfill.sh +0 -0
  156. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/monitoring.tf +0 -0
  157. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/node-termination-handler.tf +0 -0
  158. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/outputs.tf +0 -0
  159. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/pyproject.toml +0 -0
  160. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/pytorch-ondemand.tf +0 -0
  161. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/pytorch-prebuild.tf +0 -0
  162. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/queue.tf +0 -0
  163. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/route53.tf +0 -0
  164. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/s3-disk-contents.tf +0 -0
  165. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/scripts/CLEANUP_GUIDE.md +0 -0
  166. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/scripts/detect_empty_volumes.sh +0 -0
  167. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/scripts/ec2_avail_probe.sh +0 -0
  168. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/scripts/inspect_user_data.sh +0 -0
  169. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ssh-proxy/Dockerfile +0 -0
  170. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ssh-proxy/proxy.py +0 -0
  171. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ssh-proxy/requirements.txt +0 -0
  172. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ssh-proxy-service.tf +0 -0
  173. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/ssh-proxy.tf +0 -0
  174. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/subnet-0fe3a2c45570091ad +0 -0
  175. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/switch-to.sh +0 -0
  176. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/templates/al2023-cpu-user-data.sh +0 -0
  177. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/templates/al2023-user-data.sh +0 -0
  178. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/templates/ami-baker-user-data.sh +0 -0
  179. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/templates/user-data-self-managed.sh +0 -0
  180. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/templates/user-data.sh +0 -0
  181. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/variables.tf +0 -0
  182. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/terraform-gpu-devservers/warm-pool.tf +0 -0
  183. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/__init__.py +0 -0
  184. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/README.md +0 -0
  185. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/__init__.py +0 -0
  186. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/conftest.py +0 -0
  187. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/test_claude.py +0 -0
  188. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/test_cpu_lifecycle.py +0 -0
  189. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/test_repro_known_failure.py +0 -0
  190. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/test_t4_lifecycle.py +0 -0
  191. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/integration/test_warm_pool.py +0 -0
  192. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/submit/README.md +0 -0
  193. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/submit/fail/run.sh +0 -0
  194. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/submit/multinode/run.sh +0 -0
  195. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/submit/success/run.sh +0 -0
  196. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/__init__.py +0 -0
  197. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/__init__.py +0 -0
  198. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_auth.py +0 -0
  199. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_avail.py +0 -0
  200. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_cancel.py +0 -0
  201. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_config_cmd.py +0 -0
  202. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_config_module.py +0 -0
  203. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_connect.py +0 -0
  204. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_debug.py +0 -0
  205. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_disks.py +0 -0
  206. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_edit.py +0 -0
  207. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_interactive.py +0 -0
  208. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_list_show.py +0 -0
  209. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_name_generator.py +0 -0
  210. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_reservations_mgr.py +0 -0
  211. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_reserve.py +0 -0
  212. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_smoke.py +0 -0
  213. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_ssh_alias.py +0 -0
  214. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/cli/test_submit.py +0 -0
  215. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/__init__.py +0 -0
  216. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_availability.py +0 -0
  217. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_cancellation.py +0 -0
  218. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_claim.py +0 -0
  219. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_dead_pod_cleanup.py +0 -0
  220. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_finalize_no_ssh.py +0 -0
  221. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_get_logs.py +0 -0
  222. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_mig_gpu_config.py +0 -0
  223. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_pod_resources.py +0 -0
  224. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_ref_staging.py +0 -0
  225. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_smoke.py +0 -0
  226. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_version_gate.py +0 -0
  227. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/lambda_fn/test_warm_pool.py +0 -0
  228. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/__init__.py +0 -0
  229. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_backend_aws.py +0 -0
  230. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_client.py +0 -0
  231. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_errors_enums.py +0 -0
  232. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_models_extra.py +0 -0
  233. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_sandbox.py +0 -0
  234. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_sdk_config.py +0 -0
  235. {gpu_dev-0.7.13 → gpu_dev-0.7.14}/tests/unit/sdk/test_transport_ssh.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpu-dev
3
- Version: 0.7.13
3
+ Version: 0.7.14
4
4
  Summary: CLI + Python SDK for PyTorch GPU developer server reservations
5
5
  Author: PyTorch Team
6
6
  Requires-Python: >=3.10
@@ -1524,9 +1524,13 @@ def reserve(
1524
1524
  @click.argument("ref", required=False)
1525
1525
  @click.argument("test_args", nargs=-1, required=False)
1526
1526
  @click.option("--lint", is_flag=True, default=False,
1527
- help="Run a PyTorch lint job (lintrunner) on a CPU box instead of a python test. "
1528
- "Defaults to --gpu-type cpu-x86 and skips the torch build. Extra args go to "
1529
- "lintrunner (default: --merge-base-with origin/main, i.e. the PR diff like CI).")
1527
+ help="Run a PyTorch lint job (lintrunner) on a CPU box instead of a python test "
1528
+ "mirrors CI's lint (.github/scripts/lintrunner.sh): regenerates version/type "
1529
+ "stubs then runs the python/general linters. Defaults to --gpu-type cpu-x86, "
1530
+ "no torch build. PR ref lints its diff; main lints all files; extra args override scope.")
1531
+ @click.option("--clang", is_flag=True, default=False,
1532
+ help="With --lint, also run the C++ linters (CLANGTIDY/CLANGFORMAT). CI runs these in a "
1533
+ "separate job — they generate clang build files and are heavy on a full tree.")
1530
1534
  @click.option("--gpu-type", default=None, help="GPU type for the repro box (default: b200; cpu-x86 with --lint).")
1531
1535
  @click.option("--gpus", type=int, default=1, show_default=True)
1532
1536
  @click.option("--hours", type=float, default=3.0, show_default=True,
@@ -1536,7 +1540,7 @@ def reserve(
1536
1540
  @click.option("--keep", is_flag=True, default=False,
1537
1541
  help="Never cancel the box (skip the cancel prompt / auto-cancel).")
1538
1542
  @click.pass_context
1539
- def repro(ctx, ref, test_args, lint, gpu_type, gpus, hours, no_connect, keep):
1543
+ def repro(ctx, ref, test_args, lint, clang, gpu_type, gpus, hours, no_connect, keep):
1540
1544
  """Reserve a box, check out a PR/commit, run a test (or lint), then drop you in.
1541
1545
 
1542
1546
  By default (in a terminal) repro runs the test and then **connects you into the
@@ -1551,11 +1555,13 @@ def repro(ctx, ref, test_args, lint, gpu_type, gpus, hours, no_connect, keep):
1551
1555
 
1552
1556
  gpu-dev repro pr/185264 test/inductor/test_flex_attention.py TestFlexAttentionCUDA.test_large_kv_int64_pointer_math_cuda
1553
1557
 
1554
- --lint runs lintrunner on a CPU box instead (no GPU, no torch build), e.g.
1558
+ --lint runs lintrunner on a CPU box instead (no GPU, no torch build), mirroring
1559
+ CI's lint (regenerate version/type stubs, then the python/general linters), e.g.
1555
1560
 
1556
1561
  gpu-dev repro --lint # lint main (all files)
1557
1562
  gpu-dev repro --lint pr/185264 # lint the PR diff (CI-equivalent)
1558
1563
  gpu-dev repro --lint pr/185264 --all-files # lint everything
1564
+ gpu-dev repro --lint --clang pr/185264 # also run C++ clang-tidy/format
1559
1565
 
1560
1566
  The box stays up after the run: on a TTY you're dropped in and prompted to
1561
1567
  cancel on exit (use --keep to leave it running; --no-connect auto-cancels).
@@ -1663,16 +1669,29 @@ def repro(ctx, ref, test_args, lint, gpu_type, gpus, hours, no_connect, keep):
1663
1669
 
1664
1670
  runlabel, rerun_hint = "test", f"python {testcmd}"
1665
1671
  if lint:
1666
- # Lint needs the source tree at the ref but NO torch build. Most pods already
1667
- # have /home/dev/pytorch; CPU pods may not, so clone (partial) as a fallback.
1668
- # origin/main is fetched so --merge-base-with works (the PR-diff scope CI lints).
1669
- # PR ref -> lint the diff (CI-equivalent); main/branch/sha -> lint everything
1670
- # (merge-base-with origin/main would be empty when you ARE main).
1671
- lint_default = "--merge-base-with origin/main" if prnum else "--all-files"
1672
- lintargs = " ".join(shlex.quote(a) for a in test_args) or lint_default
1673
- runlabel, rerun_hint = "lint", f"lintrunner {lintargs}"
1672
+ # Mirror pytorch CI's lint (.github/scripts/lintrunner.sh): regenerate version +
1673
+ # type stubs (so mypy/pyrefly are accurate), then run the python/general linters.
1674
+ # CLANGTIDY/CLANGFORMAT are a separate CI job (need generated build files, very
1675
+ # heavy on a full tree) -> opt-in via --clang. No torch build. Source-only tree
1676
+ # (cloned if a CPU pod doesn't have one). Scope mirrors CI: a PR lints its diff
1677
+ # (merge-base), main lints all files; extra args override the scope.
1678
+ if test_args:
1679
+ scope = " ".join(test_args)
1680
+ elif prnum:
1681
+ scope = "--merge-base-with origin/main"
1682
+ else:
1683
+ scope = "--all-files"
1684
+ runlabel = "lint"
1685
+ rerun_hint = f"lintrunner --skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT {scope}"
1686
+ clang_block = (
1687
+ "echo '[lint] === C++ linters (CLANGTIDY/CLANGFORMAT) — generating clang build files (heavy)… ==='; "
1688
+ "python -m tools.linter.clang_tidy.generate_build_files 2>/dev/null || true; "
1689
+ f"lintrunner --force-color --take CLANGTIDY,CLANGFORMAT {scope}; rr=$?; [ $rr -ne 0 ] && RC=$rr; "
1690
+ ) if clang else (
1691
+ "echo '[lint] C++ linters (CLANGTIDY/CLANGFORMAT) skipped — add --clang to run them'; "
1692
+ )
1674
1693
  remote = (
1675
- "set -e; "
1694
+ "set +e; "
1676
1695
  "git config --global --add safe.directory /home/dev/pytorch 2>/dev/null || true; "
1677
1696
  "if [ ! -d /home/dev/pytorch/.git ]; then echo '[lint] no pytorch tree on this pod — cloning (partial)…'; "
1678
1697
  "rm -rf /home/dev/pytorch; git clone --filter=blob:none https://github.com/pytorch/pytorch.git /home/dev/pytorch; fi; "
@@ -1683,9 +1702,17 @@ def repro(ctx, ref, test_args, lint, gpu_type, gpus, hours, no_connect, keep):
1683
1702
  "echo \"[lint] checking out $FREF\"; " + checkout + "; "
1684
1703
  "echo \"[lint] HEAD $(git rev-parse --short HEAD)\"; "
1685
1704
  "command -v lintrunner >/dev/null 2>&1 || pip install --break-system-packages -q lintrunner; "
1686
- "echo '[lint] lintrunner init (downloading linters)…'; lintrunner init; "
1687
- f"echo '[lint] running: lintrunner {lintargs}'; "
1688
- f"lintrunner {lintargs}"
1705
+ # CI codegen so mypy/pyrefly see generated files (version.py + type stubs)
1706
+ "echo '[lint] regenerating version + type stubs (CI parity)…'; "
1707
+ "python -m tools.generate_torch_version --is-debug=false 2>/dev/null || true; "
1708
+ "python -m tools.pyi.gen_pyi --native-functions-path aten/src/ATen/native/native_functions.yaml "
1709
+ "--tags-path aten/src/ATen/native/tags.yaml --deprecated-functions-path tools/autograd/deprecated.yaml 2>/dev/null || true; "
1710
+ "python torch/utils/data/datapipes/gen_pyi.py 2>/dev/null || true; "
1711
+ "echo '[lint] lintrunner init…'; lintrunner init; RC=0; "
1712
+ f"echo '[lint] === python/general linters: lintrunner {scope} ==='; "
1713
+ f"lintrunner --force-color --skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT {scope}; rr=$?; [ $rr -ne 0 ] && RC=$rr; "
1714
+ + clang_block +
1715
+ "exit $RC"
1689
1716
  )
1690
1717
 
1691
1718
  # Reserve — warm claim (instant) first, else cold ephemeral. Always no-persist
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpu-dev
3
- Version: 0.7.13
3
+ Version: 0.7.14
4
4
  Summary: CLI + Python SDK for PyTorch GPU developer server reservations
5
5
  Author: PyTorch Team
6
6
  Requires-Python: >=3.10
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gpu-dev"
7
- version = "0.7.13"
7
+ version = "0.7.14"
8
8
  description = "CLI + Python SDK for PyTorch GPU developer server reservations"
9
9
  authors = [{name = "PyTorch Team"}]
10
10
  readme = "cli-tools/gpu-dev-cli/README.md"
@@ -457,21 +457,34 @@ def test_lint_defaults_to_cpu_x86_with_zero_gpus(cli_runner):
457
457
  assert kwargs["name"] == "repro"
458
458
 
459
459
 
460
- def test_lint_remote_runs_lintrunner_default_merge_base(cli_runner):
460
+ def test_lint_remote_mirrors_ci_pr_diff_no_clang(cli_runner):
461
461
  res, rm, run = _run(cli_runner, ["--lint", "pr/1"], claim_result=WARM)
462
462
  cmd = _remote_str(run)
463
463
  assert "lintrunner init" in cmd
464
- assert "lintrunner --merge-base-with origin/main" in cmd
464
+ # CI codegen (version + type stubs) so mypy/pyrefly are accurate
465
+ assert "tools.generate_torch_version" in cmd
466
+ assert "tools.pyi.gen_pyi" in cmd
467
+ # python/general linters on the PR diff, clang linters skipped by default
468
+ assert "--skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT --merge-base-with origin/main" in cmd
469
+ assert "--take CLANGTIDY,CLANGFORMAT" not in cmd
470
+ assert "add --clang to run them" in cmd
465
471
  # no torch build / no python test on the lint path
466
472
  assert "pip install --break-system-packages -e ." not in cmd
467
473
  assert "PYTHONPATH=/home/dev/pytorch python" not in cmd
468
474
 
469
475
 
470
- def test_lint_passes_extra_args_to_lintrunner(cli_runner):
471
- # extra args (ignore_unknown_options) flow straight to lintrunner, overriding the default.
476
+ def test_lint_clang_flag_runs_cpp_linters(cli_runner):
477
+ res, rm, run = _run(cli_runner, ["--lint", "--clang", "pr/1"], claim_result=WARM)
478
+ cmd = _remote_str(run)
479
+ assert "tools.linter.clang_tidy.generate_build_files" in cmd
480
+ assert "--take CLANGTIDY,CLANGFORMAT --merge-base-with origin/main" in cmd
481
+
482
+
483
+ def test_lint_passes_extra_args_as_scope(cli_runner):
484
+ # extra args (ignore_unknown_options) override the scope.
472
485
  res, rm, run = _run(cli_runner, ["--lint", "pr/1", "--all-files"], claim_result=WARM)
473
486
  cmd = _remote_str(run)
474
- assert "lintrunner --all-files" in cmd
487
+ assert "--skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT --all-files" in cmd
475
488
  assert "--merge-base-with" not in cmd
476
489
 
477
490
 
@@ -498,7 +511,7 @@ def test_lint_no_ref_lints_main_all_files(cli_runner):
498
511
  assert kwargs["gpu_type"] == "cpu-x86"
499
512
  assert kwargs["gpu_count"] == 0
500
513
  cmd = _remote_str(run)
501
- assert "lintrunner --all-files" in cmd
514
+ assert "--skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT --all-files" in cmd
502
515
  assert "--merge-base-with" not in cmd
503
516
 
504
517
 
@@ -506,7 +519,7 @@ def test_lint_branch_ref_defaults_to_all_files(cli_runner):
506
519
  # a non-PR ref (branch/sha) lints everything, not the empty merge-base diff.
507
520
  res, rm, run = _run(cli_runner, ["--lint", "main"], claim_result=WARM)
508
521
  cmd = _remote_str(run)
509
- assert "lintrunner --all-files" in cmd
522
+ assert "--skip CLANGTIDY,CLANGTIDY_EXECUTORCH_COMPATIBILITY,CLANGFORMAT --all-files" in cmd
510
523
 
511
524
 
512
525
  def test_test_path_requires_ref(cli_runner):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes