wandb 0.18.2__py3-none-musllinux_1_2_x86_64.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 (827) hide show
  1. package_readme.md +89 -0
  2. wandb/__init__.py +245 -0
  3. wandb/__init__.pyi +1139 -0
  4. wandb/__main__.py +3 -0
  5. wandb/_globals.py +19 -0
  6. wandb/agents/__init__.py +0 -0
  7. wandb/agents/pyagent.py +363 -0
  8. wandb/analytics/__init__.py +3 -0
  9. wandb/analytics/sentry.py +266 -0
  10. wandb/apis/__init__.py +48 -0
  11. wandb/apis/attrs.py +40 -0
  12. wandb/apis/importers/__init__.py +1 -0
  13. wandb/apis/importers/internals/internal.py +385 -0
  14. wandb/apis/importers/internals/protocols.py +99 -0
  15. wandb/apis/importers/internals/util.py +78 -0
  16. wandb/apis/importers/mlflow.py +254 -0
  17. wandb/apis/importers/validation.py +108 -0
  18. wandb/apis/importers/wandb.py +1603 -0
  19. wandb/apis/internal.py +232 -0
  20. wandb/apis/normalize.py +89 -0
  21. wandb/apis/paginator.py +81 -0
  22. wandb/apis/public/__init__.py +34 -0
  23. wandb/apis/public/api.py +1305 -0
  24. wandb/apis/public/artifacts.py +1090 -0
  25. wandb/apis/public/const.py +4 -0
  26. wandb/apis/public/files.py +195 -0
  27. wandb/apis/public/history.py +149 -0
  28. wandb/apis/public/jobs.py +659 -0
  29. wandb/apis/public/projects.py +154 -0
  30. wandb/apis/public/query_generator.py +166 -0
  31. wandb/apis/public/reports.py +469 -0
  32. wandb/apis/public/runs.py +914 -0
  33. wandb/apis/public/sweeps.py +240 -0
  34. wandb/apis/public/teams.py +198 -0
  35. wandb/apis/public/users.py +136 -0
  36. wandb/apis/reports/__init__.py +1 -0
  37. wandb/apis/reports/v1/__init__.py +8 -0
  38. wandb/apis/reports/v2/__init__.py +8 -0
  39. wandb/apis/workspaces/__init__.py +8 -0
  40. wandb/beta/workflows.py +288 -0
  41. wandb/bin/nvidia_gpu_stats +0 -0
  42. wandb/bin/wandb-core +0 -0
  43. wandb/cli/__init__.py +0 -0
  44. wandb/cli/cli.py +3004 -0
  45. wandb/data_types.py +63 -0
  46. wandb/docker/__init__.py +342 -0
  47. wandb/docker/auth.py +436 -0
  48. wandb/docker/wandb-entrypoint.sh +33 -0
  49. wandb/docker/www_authenticate.py +94 -0
  50. wandb/env.py +514 -0
  51. wandb/errors/__init__.py +17 -0
  52. wandb/errors/errors.py +37 -0
  53. wandb/errors/term.py +103 -0
  54. wandb/errors/util.py +57 -0
  55. wandb/errors/warnings.py +2 -0
  56. wandb/filesync/__init__.py +0 -0
  57. wandb/filesync/dir_watcher.py +403 -0
  58. wandb/filesync/stats.py +100 -0
  59. wandb/filesync/step_checksum.py +142 -0
  60. wandb/filesync/step_prepare.py +179 -0
  61. wandb/filesync/step_upload.py +290 -0
  62. wandb/filesync/upload_job.py +142 -0
  63. wandb/integration/__init__.py +0 -0
  64. wandb/integration/catboost/__init__.py +5 -0
  65. wandb/integration/catboost/catboost.py +178 -0
  66. wandb/integration/cohere/__init__.py +3 -0
  67. wandb/integration/cohere/cohere.py +21 -0
  68. wandb/integration/cohere/resolver.py +347 -0
  69. wandb/integration/diffusers/__init__.py +3 -0
  70. wandb/integration/diffusers/autologger.py +76 -0
  71. wandb/integration/diffusers/pipeline_resolver.py +50 -0
  72. wandb/integration/diffusers/resolvers/__init__.py +9 -0
  73. wandb/integration/diffusers/resolvers/multimodal.py +882 -0
  74. wandb/integration/diffusers/resolvers/utils.py +102 -0
  75. wandb/integration/fastai/__init__.py +249 -0
  76. wandb/integration/gym/__init__.py +105 -0
  77. wandb/integration/huggingface/__init__.py +3 -0
  78. wandb/integration/huggingface/huggingface.py +18 -0
  79. wandb/integration/huggingface/resolver.py +213 -0
  80. wandb/integration/keras/__init__.py +11 -0
  81. wandb/integration/keras/callbacks/__init__.py +5 -0
  82. wandb/integration/keras/callbacks/metrics_logger.py +136 -0
  83. wandb/integration/keras/callbacks/model_checkpoint.py +195 -0
  84. wandb/integration/keras/callbacks/tables_builder.py +226 -0
  85. wandb/integration/keras/keras.py +1091 -0
  86. wandb/integration/kfp/__init__.py +6 -0
  87. wandb/integration/kfp/helpers.py +28 -0
  88. wandb/integration/kfp/kfp_patch.py +324 -0
  89. wandb/integration/kfp/wandb_logging.py +182 -0
  90. wandb/integration/langchain/__init__.py +3 -0
  91. wandb/integration/langchain/wandb_tracer.py +48 -0
  92. wandb/integration/lightgbm/__init__.py +239 -0
  93. wandb/integration/lightning/__init__.py +0 -0
  94. wandb/integration/lightning/fabric/__init__.py +3 -0
  95. wandb/integration/lightning/fabric/logger.py +762 -0
  96. wandb/integration/magic.py +556 -0
  97. wandb/integration/metaflow/__init__.py +3 -0
  98. wandb/integration/metaflow/metaflow.py +383 -0
  99. wandb/integration/openai/__init__.py +3 -0
  100. wandb/integration/openai/fine_tuning.py +480 -0
  101. wandb/integration/openai/openai.py +22 -0
  102. wandb/integration/openai/resolver.py +240 -0
  103. wandb/integration/prodigy/__init__.py +3 -0
  104. wandb/integration/prodigy/prodigy.py +299 -0
  105. wandb/integration/sacred/__init__.py +117 -0
  106. wandb/integration/sagemaker/__init__.py +12 -0
  107. wandb/integration/sagemaker/auth.py +28 -0
  108. wandb/integration/sagemaker/config.py +49 -0
  109. wandb/integration/sagemaker/files.py +3 -0
  110. wandb/integration/sagemaker/resources.py +34 -0
  111. wandb/integration/sb3/__init__.py +3 -0
  112. wandb/integration/sb3/sb3.py +153 -0
  113. wandb/integration/sklearn/__init__.py +37 -0
  114. wandb/integration/sklearn/calculate/__init__.py +32 -0
  115. wandb/integration/sklearn/calculate/calibration_curves.py +125 -0
  116. wandb/integration/sklearn/calculate/class_proportions.py +68 -0
  117. wandb/integration/sklearn/calculate/confusion_matrix.py +93 -0
  118. wandb/integration/sklearn/calculate/decision_boundaries.py +40 -0
  119. wandb/integration/sklearn/calculate/elbow_curve.py +55 -0
  120. wandb/integration/sklearn/calculate/feature_importances.py +67 -0
  121. wandb/integration/sklearn/calculate/learning_curve.py +64 -0
  122. wandb/integration/sklearn/calculate/outlier_candidates.py +69 -0
  123. wandb/integration/sklearn/calculate/residuals.py +86 -0
  124. wandb/integration/sklearn/calculate/silhouette.py +118 -0
  125. wandb/integration/sklearn/calculate/summary_metrics.py +62 -0
  126. wandb/integration/sklearn/plot/__init__.py +35 -0
  127. wandb/integration/sklearn/plot/classifier.py +329 -0
  128. wandb/integration/sklearn/plot/clusterer.py +146 -0
  129. wandb/integration/sklearn/plot/regressor.py +121 -0
  130. wandb/integration/sklearn/plot/shared.py +91 -0
  131. wandb/integration/sklearn/utils.py +183 -0
  132. wandb/integration/tensorboard/__init__.py +10 -0
  133. wandb/integration/tensorboard/log.py +355 -0
  134. wandb/integration/tensorboard/monkeypatch.py +185 -0
  135. wandb/integration/tensorflow/__init__.py +5 -0
  136. wandb/integration/tensorflow/estimator_hook.py +54 -0
  137. wandb/integration/torch/__init__.py +0 -0
  138. wandb/integration/torch/wandb_torch.py +554 -0
  139. wandb/integration/ultralytics/__init__.py +11 -0
  140. wandb/integration/ultralytics/bbox_utils.py +208 -0
  141. wandb/integration/ultralytics/callback.py +524 -0
  142. wandb/integration/ultralytics/classification_utils.py +83 -0
  143. wandb/integration/ultralytics/mask_utils.py +202 -0
  144. wandb/integration/ultralytics/pose_utils.py +103 -0
  145. wandb/integration/xgboost/__init__.py +11 -0
  146. wandb/integration/xgboost/xgboost.py +189 -0
  147. wandb/integration/yolov8/__init__.py +0 -0
  148. wandb/integration/yolov8/yolov8.py +284 -0
  149. wandb/jupyter.py +515 -0
  150. wandb/magic.py +3 -0
  151. wandb/mpmain/__init__.py +0 -0
  152. wandb/mpmain/__main__.py +1 -0
  153. wandb/old/__init__.py +0 -0
  154. wandb/old/core.py +53 -0
  155. wandb/old/settings.py +173 -0
  156. wandb/old/summary.py +440 -0
  157. wandb/plot/__init__.py +19 -0
  158. wandb/plot/bar.py +45 -0
  159. wandb/plot/confusion_matrix.py +100 -0
  160. wandb/plot/histogram.py +39 -0
  161. wandb/plot/line.py +43 -0
  162. wandb/plot/line_series.py +88 -0
  163. wandb/plot/pr_curve.py +136 -0
  164. wandb/plot/roc_curve.py +118 -0
  165. wandb/plot/scatter.py +32 -0
  166. wandb/plot/utils.py +183 -0
  167. wandb/plot/viz.py +123 -0
  168. wandb/proto/__init__.py +0 -0
  169. wandb/proto/v3/__init__.py +0 -0
  170. wandb/proto/v3/wandb_base_pb2.py +55 -0
  171. wandb/proto/v3/wandb_internal_pb2.py +1608 -0
  172. wandb/proto/v3/wandb_server_pb2.py +208 -0
  173. wandb/proto/v3/wandb_settings_pb2.py +112 -0
  174. wandb/proto/v3/wandb_telemetry_pb2.py +106 -0
  175. wandb/proto/v4/__init__.py +0 -0
  176. wandb/proto/v4/wandb_base_pb2.py +30 -0
  177. wandb/proto/v4/wandb_internal_pb2.py +360 -0
  178. wandb/proto/v4/wandb_server_pb2.py +63 -0
  179. wandb/proto/v4/wandb_settings_pb2.py +45 -0
  180. wandb/proto/v4/wandb_telemetry_pb2.py +41 -0
  181. wandb/proto/v5/wandb_base_pb2.py +31 -0
  182. wandb/proto/v5/wandb_internal_pb2.py +361 -0
  183. wandb/proto/v5/wandb_server_pb2.py +64 -0
  184. wandb/proto/v5/wandb_settings_pb2.py +46 -0
  185. wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
  186. wandb/proto/wandb_base_pb2.py +10 -0
  187. wandb/proto/wandb_deprecated.py +53 -0
  188. wandb/proto/wandb_generate_deprecated.py +34 -0
  189. wandb/proto/wandb_generate_proto.py +49 -0
  190. wandb/proto/wandb_internal_pb2.py +16 -0
  191. wandb/proto/wandb_server_pb2.py +10 -0
  192. wandb/proto/wandb_settings_pb2.py +10 -0
  193. wandb/proto/wandb_telemetry_pb2.py +10 -0
  194. wandb/py.typed +0 -0
  195. wandb/sdk/__init__.py +37 -0
  196. wandb/sdk/artifacts/__init__.py +0 -0
  197. wandb/sdk/artifacts/_validators.py +90 -0
  198. wandb/sdk/artifacts/artifact.py +2389 -0
  199. wandb/sdk/artifacts/artifact_download_logger.py +43 -0
  200. wandb/sdk/artifacts/artifact_file_cache.py +253 -0
  201. wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
  202. wandb/sdk/artifacts/artifact_manifest.py +74 -0
  203. wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
  204. wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
  205. wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
  206. wandb/sdk/artifacts/artifact_saver.py +269 -0
  207. wandb/sdk/artifacts/artifact_state.py +11 -0
  208. wandb/sdk/artifacts/artifact_ttl.py +7 -0
  209. wandb/sdk/artifacts/exceptions.py +57 -0
  210. wandb/sdk/artifacts/staging.py +25 -0
  211. wandb/sdk/artifacts/storage_handler.py +62 -0
  212. wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
  213. wandb/sdk/artifacts/storage_handlers/azure_handler.py +208 -0
  214. wandb/sdk/artifacts/storage_handlers/gcs_handler.py +228 -0
  215. wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
  216. wandb/sdk/artifacts/storage_handlers/local_file_handler.py +141 -0
  217. wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
  218. wandb/sdk/artifacts/storage_handlers/s3_handler.py +300 -0
  219. wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
  220. wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
  221. wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
  222. wandb/sdk/artifacts/storage_layout.py +6 -0
  223. wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
  224. wandb/sdk/artifacts/storage_policies/register.py +1 -0
  225. wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
  226. wandb/sdk/artifacts/storage_policy.py +72 -0
  227. wandb/sdk/backend/__init__.py +0 -0
  228. wandb/sdk/backend/backend.py +222 -0
  229. wandb/sdk/data_types/__init__.py +0 -0
  230. wandb/sdk/data_types/_dtypes.py +914 -0
  231. wandb/sdk/data_types/_private.py +10 -0
  232. wandb/sdk/data_types/audio.py +165 -0
  233. wandb/sdk/data_types/base_types/__init__.py +0 -0
  234. wandb/sdk/data_types/base_types/json_metadata.py +55 -0
  235. wandb/sdk/data_types/base_types/media.py +315 -0
  236. wandb/sdk/data_types/base_types/wb_value.py +272 -0
  237. wandb/sdk/data_types/bokeh.py +70 -0
  238. wandb/sdk/data_types/graph.py +405 -0
  239. wandb/sdk/data_types/helper_types/__init__.py +0 -0
  240. wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +295 -0
  241. wandb/sdk/data_types/helper_types/classes.py +159 -0
  242. wandb/sdk/data_types/helper_types/image_mask.py +235 -0
  243. wandb/sdk/data_types/histogram.py +96 -0
  244. wandb/sdk/data_types/html.py +115 -0
  245. wandb/sdk/data_types/image.py +845 -0
  246. wandb/sdk/data_types/molecule.py +241 -0
  247. wandb/sdk/data_types/object_3d.py +474 -0
  248. wandb/sdk/data_types/plotly.py +82 -0
  249. wandb/sdk/data_types/saved_model.py +446 -0
  250. wandb/sdk/data_types/table.py +1204 -0
  251. wandb/sdk/data_types/trace_tree.py +438 -0
  252. wandb/sdk/data_types/utils.py +229 -0
  253. wandb/sdk/data_types/video.py +247 -0
  254. wandb/sdk/integration_utils/__init__.py +0 -0
  255. wandb/sdk/integration_utils/auto_logging.py +239 -0
  256. wandb/sdk/integration_utils/data_logging.py +475 -0
  257. wandb/sdk/interface/__init__.py +0 -0
  258. wandb/sdk/interface/constants.py +4 -0
  259. wandb/sdk/interface/interface.py +972 -0
  260. wandb/sdk/interface/interface_queue.py +59 -0
  261. wandb/sdk/interface/interface_relay.py +53 -0
  262. wandb/sdk/interface/interface_shared.py +537 -0
  263. wandb/sdk/interface/interface_sock.py +61 -0
  264. wandb/sdk/interface/message_future.py +27 -0
  265. wandb/sdk/interface/message_future_poll.py +50 -0
  266. wandb/sdk/interface/router.py +118 -0
  267. wandb/sdk/interface/router_queue.py +44 -0
  268. wandb/sdk/interface/router_relay.py +39 -0
  269. wandb/sdk/interface/router_sock.py +36 -0
  270. wandb/sdk/interface/summary_record.py +67 -0
  271. wandb/sdk/internal/__init__.py +0 -0
  272. wandb/sdk/internal/context.py +89 -0
  273. wandb/sdk/internal/datastore.py +297 -0
  274. wandb/sdk/internal/file_pusher.py +181 -0
  275. wandb/sdk/internal/file_stream.py +695 -0
  276. wandb/sdk/internal/flow_control.py +263 -0
  277. wandb/sdk/internal/handler.py +901 -0
  278. wandb/sdk/internal/internal.py +417 -0
  279. wandb/sdk/internal/internal_api.py +4358 -0
  280. wandb/sdk/internal/internal_util.py +100 -0
  281. wandb/sdk/internal/job_builder.py +629 -0
  282. wandb/sdk/internal/profiler.py +78 -0
  283. wandb/sdk/internal/progress.py +83 -0
  284. wandb/sdk/internal/run.py +25 -0
  285. wandb/sdk/internal/sample.py +70 -0
  286. wandb/sdk/internal/sender.py +1686 -0
  287. wandb/sdk/internal/sender_config.py +197 -0
  288. wandb/sdk/internal/settings_static.py +90 -0
  289. wandb/sdk/internal/system/__init__.py +0 -0
  290. wandb/sdk/internal/system/assets/__init__.py +27 -0
  291. wandb/sdk/internal/system/assets/aggregators.py +37 -0
  292. wandb/sdk/internal/system/assets/asset_registry.py +20 -0
  293. wandb/sdk/internal/system/assets/cpu.py +163 -0
  294. wandb/sdk/internal/system/assets/disk.py +210 -0
  295. wandb/sdk/internal/system/assets/gpu.py +416 -0
  296. wandb/sdk/internal/system/assets/gpu_amd.py +239 -0
  297. wandb/sdk/internal/system/assets/gpu_apple.py +177 -0
  298. wandb/sdk/internal/system/assets/interfaces.py +207 -0
  299. wandb/sdk/internal/system/assets/ipu.py +177 -0
  300. wandb/sdk/internal/system/assets/memory.py +166 -0
  301. wandb/sdk/internal/system/assets/network.py +125 -0
  302. wandb/sdk/internal/system/assets/open_metrics.py +299 -0
  303. wandb/sdk/internal/system/assets/tpu.py +154 -0
  304. wandb/sdk/internal/system/assets/trainium.py +399 -0
  305. wandb/sdk/internal/system/env_probe_helpers.py +13 -0
  306. wandb/sdk/internal/system/system_info.py +249 -0
  307. wandb/sdk/internal/system/system_monitor.py +229 -0
  308. wandb/sdk/internal/tb_watcher.py +518 -0
  309. wandb/sdk/internal/thread_local_settings.py +18 -0
  310. wandb/sdk/internal/writer.py +206 -0
  311. wandb/sdk/launch/__init__.py +14 -0
  312. wandb/sdk/launch/_launch.py +330 -0
  313. wandb/sdk/launch/_launch_add.py +255 -0
  314. wandb/sdk/launch/_project_spec.py +566 -0
  315. wandb/sdk/launch/agent/__init__.py +5 -0
  316. wandb/sdk/launch/agent/agent.py +924 -0
  317. wandb/sdk/launch/agent/config.py +296 -0
  318. wandb/sdk/launch/agent/job_status_tracker.py +53 -0
  319. wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
  320. wandb/sdk/launch/builder/__init__.py +0 -0
  321. wandb/sdk/launch/builder/abstract.py +156 -0
  322. wandb/sdk/launch/builder/build.py +297 -0
  323. wandb/sdk/launch/builder/context_manager.py +235 -0
  324. wandb/sdk/launch/builder/docker_builder.py +177 -0
  325. wandb/sdk/launch/builder/kaniko_builder.py +595 -0
  326. wandb/sdk/launch/builder/noop.py +58 -0
  327. wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
  328. wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
  329. wandb/sdk/launch/create_job.py +528 -0
  330. wandb/sdk/launch/environment/abstract.py +29 -0
  331. wandb/sdk/launch/environment/aws_environment.py +322 -0
  332. wandb/sdk/launch/environment/azure_environment.py +105 -0
  333. wandb/sdk/launch/environment/gcp_environment.py +335 -0
  334. wandb/sdk/launch/environment/local_environment.py +66 -0
  335. wandb/sdk/launch/errors.py +19 -0
  336. wandb/sdk/launch/git_reference.py +109 -0
  337. wandb/sdk/launch/inputs/files.py +148 -0
  338. wandb/sdk/launch/inputs/internal.py +315 -0
  339. wandb/sdk/launch/inputs/manage.py +113 -0
  340. wandb/sdk/launch/inputs/schema.py +39 -0
  341. wandb/sdk/launch/loader.py +249 -0
  342. wandb/sdk/launch/registry/abstract.py +48 -0
  343. wandb/sdk/launch/registry/anon.py +29 -0
  344. wandb/sdk/launch/registry/azure_container_registry.py +124 -0
  345. wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
  346. wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
  347. wandb/sdk/launch/registry/local_registry.py +67 -0
  348. wandb/sdk/launch/runner/__init__.py +0 -0
  349. wandb/sdk/launch/runner/abstract.py +195 -0
  350. wandb/sdk/launch/runner/kubernetes_monitor.py +474 -0
  351. wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
  352. wandb/sdk/launch/runner/local_container.py +301 -0
  353. wandb/sdk/launch/runner/local_process.py +78 -0
  354. wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
  355. wandb/sdk/launch/runner/vertex_runner.py +230 -0
  356. wandb/sdk/launch/sweeps/__init__.py +39 -0
  357. wandb/sdk/launch/sweeps/scheduler.py +742 -0
  358. wandb/sdk/launch/sweeps/scheduler_sweep.py +91 -0
  359. wandb/sdk/launch/sweeps/utils.py +316 -0
  360. wandb/sdk/launch/utils.py +746 -0
  361. wandb/sdk/launch/wandb_reference.py +138 -0
  362. wandb/sdk/lib/__init__.py +5 -0
  363. wandb/sdk/lib/_settings_toposort_generate.py +159 -0
  364. wandb/sdk/lib/_settings_toposort_generated.py +250 -0
  365. wandb/sdk/lib/_wburls_generate.py +25 -0
  366. wandb/sdk/lib/_wburls_generated.py +22 -0
  367. wandb/sdk/lib/apikey.py +273 -0
  368. wandb/sdk/lib/capped_dict.py +26 -0
  369. wandb/sdk/lib/config_util.py +101 -0
  370. wandb/sdk/lib/credentials.py +141 -0
  371. wandb/sdk/lib/deprecate.py +42 -0
  372. wandb/sdk/lib/disabled.py +29 -0
  373. wandb/sdk/lib/exit_hooks.py +54 -0
  374. wandb/sdk/lib/file_stream_utils.py +118 -0
  375. wandb/sdk/lib/filenames.py +64 -0
  376. wandb/sdk/lib/filesystem.py +372 -0
  377. wandb/sdk/lib/fsm.py +174 -0
  378. wandb/sdk/lib/gitlib.py +239 -0
  379. wandb/sdk/lib/gql_request.py +65 -0
  380. wandb/sdk/lib/handler_util.py +21 -0
  381. wandb/sdk/lib/hashutil.py +84 -0
  382. wandb/sdk/lib/import_hooks.py +275 -0
  383. wandb/sdk/lib/ipython.py +146 -0
  384. wandb/sdk/lib/json_util.py +80 -0
  385. wandb/sdk/lib/lazyloader.py +63 -0
  386. wandb/sdk/lib/mailbox.py +460 -0
  387. wandb/sdk/lib/module.py +69 -0
  388. wandb/sdk/lib/paths.py +106 -0
  389. wandb/sdk/lib/preinit.py +42 -0
  390. wandb/sdk/lib/printer.py +313 -0
  391. wandb/sdk/lib/proto_util.py +90 -0
  392. wandb/sdk/lib/redirect.py +845 -0
  393. wandb/sdk/lib/reporting.py +99 -0
  394. wandb/sdk/lib/retry.py +289 -0
  395. wandb/sdk/lib/run_moment.py +78 -0
  396. wandb/sdk/lib/runid.py +12 -0
  397. wandb/sdk/lib/server.py +52 -0
  398. wandb/sdk/lib/service_connection.py +216 -0
  399. wandb/sdk/lib/service_token.py +94 -0
  400. wandb/sdk/lib/sock_client.py +295 -0
  401. wandb/sdk/lib/sparkline.py +45 -0
  402. wandb/sdk/lib/telemetry.py +100 -0
  403. wandb/sdk/lib/timed_input.py +133 -0
  404. wandb/sdk/lib/timer.py +19 -0
  405. wandb/sdk/lib/tracelog.py +255 -0
  406. wandb/sdk/lib/wburls.py +46 -0
  407. wandb/sdk/service/__init__.py +0 -0
  408. wandb/sdk/service/_startup_debug.py +22 -0
  409. wandb/sdk/service/port_file.py +53 -0
  410. wandb/sdk/service/server.py +116 -0
  411. wandb/sdk/service/server_sock.py +276 -0
  412. wandb/sdk/service/service.py +242 -0
  413. wandb/sdk/service/streams.py +417 -0
  414. wandb/sdk/verify/__init__.py +0 -0
  415. wandb/sdk/verify/verify.py +501 -0
  416. wandb/sdk/wandb_alerts.py +12 -0
  417. wandb/sdk/wandb_config.py +322 -0
  418. wandb/sdk/wandb_helper.py +54 -0
  419. wandb/sdk/wandb_init.py +1266 -0
  420. wandb/sdk/wandb_login.py +349 -0
  421. wandb/sdk/wandb_metric.py +110 -0
  422. wandb/sdk/wandb_require.py +97 -0
  423. wandb/sdk/wandb_require_helpers.py +44 -0
  424. wandb/sdk/wandb_run.py +4236 -0
  425. wandb/sdk/wandb_settings.py +2001 -0
  426. wandb/sdk/wandb_setup.py +409 -0
  427. wandb/sdk/wandb_summary.py +150 -0
  428. wandb/sdk/wandb_sweep.py +119 -0
  429. wandb/sdk/wandb_sync.py +81 -0
  430. wandb/sdk/wandb_watch.py +144 -0
  431. wandb/sklearn.py +35 -0
  432. wandb/sync/__init__.py +3 -0
  433. wandb/sync/sync.py +443 -0
  434. wandb/trigger.py +29 -0
  435. wandb/util.py +1956 -0
  436. wandb/vendor/__init__.py +0 -0
  437. wandb/vendor/gql-0.2.0/setup.py +40 -0
  438. wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
  439. wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
  440. wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
  441. wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
  442. wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
  443. wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
  444. wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
  445. wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
  446. wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
  447. wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
  448. wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
  449. wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
  450. wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
  451. wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
  452. wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
  453. wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
  454. wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
  455. wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
  456. wandb/vendor/graphql-core-1.1/setup.py +86 -0
  457. wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
  458. wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
  459. wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
  460. wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
  461. wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
  462. wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
  463. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
  464. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
  465. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
  466. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
  467. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
  468. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
  469. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
  470. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
  471. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
  472. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
  473. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
  474. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
  475. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
  476. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
  477. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
  478. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
  479. wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
  480. wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
  481. wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
  482. wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
  483. wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
  484. wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
  485. wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
  486. wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
  487. wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
  488. wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
  489. wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
  490. wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
  491. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
  492. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
  493. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
  494. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
  495. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
  496. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
  497. wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
  498. wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
  499. wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
  500. wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
  501. wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
  502. wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
  503. wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
  504. wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
  505. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
  506. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
  507. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
  508. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
  509. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
  510. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
  511. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
  512. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
  513. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
  514. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
  515. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
  516. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
  517. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
  518. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
  519. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
  520. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
  521. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
  522. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
  523. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
  524. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
  525. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
  526. wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
  527. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
  528. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
  529. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
  530. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
  531. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
  532. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
  533. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
  534. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
  535. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
  536. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
  537. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
  538. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
  539. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
  540. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
  541. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
  542. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
  543. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
  544. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
  545. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
  546. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
  547. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
  548. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
  549. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
  550. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
  551. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
  552. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
  553. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
  554. wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
  555. wandb/vendor/promise-2.3.0/conftest.py +30 -0
  556. wandb/vendor/promise-2.3.0/setup.py +64 -0
  557. wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
  558. wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
  559. wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
  560. wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
  561. wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
  562. wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
  563. wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
  564. wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
  565. wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
  566. wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
  567. wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
  568. wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
  569. wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
  570. wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
  571. wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
  572. wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
  573. wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
  574. wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
  575. wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
  576. wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
  577. wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
  578. wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
  579. wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
  580. wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
  581. wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
  582. wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
  583. wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
  584. wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
  585. wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
  586. wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
  587. wandb/vendor/pygments/__init__.py +90 -0
  588. wandb/vendor/pygments/cmdline.py +568 -0
  589. wandb/vendor/pygments/console.py +74 -0
  590. wandb/vendor/pygments/filter.py +74 -0
  591. wandb/vendor/pygments/filters/__init__.py +350 -0
  592. wandb/vendor/pygments/formatter.py +95 -0
  593. wandb/vendor/pygments/formatters/__init__.py +153 -0
  594. wandb/vendor/pygments/formatters/_mapping.py +85 -0
  595. wandb/vendor/pygments/formatters/bbcode.py +109 -0
  596. wandb/vendor/pygments/formatters/html.py +851 -0
  597. wandb/vendor/pygments/formatters/img.py +600 -0
  598. wandb/vendor/pygments/formatters/irc.py +182 -0
  599. wandb/vendor/pygments/formatters/latex.py +482 -0
  600. wandb/vendor/pygments/formatters/other.py +160 -0
  601. wandb/vendor/pygments/formatters/rtf.py +147 -0
  602. wandb/vendor/pygments/formatters/svg.py +153 -0
  603. wandb/vendor/pygments/formatters/terminal.py +136 -0
  604. wandb/vendor/pygments/formatters/terminal256.py +309 -0
  605. wandb/vendor/pygments/lexer.py +871 -0
  606. wandb/vendor/pygments/lexers/__init__.py +329 -0
  607. wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
  608. wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
  609. wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
  610. wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
  611. wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
  612. wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
  613. wandb/vendor/pygments/lexers/_mapping.py +500 -0
  614. wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
  615. wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
  616. wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
  617. wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
  618. wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
  619. wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
  620. wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
  621. wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
  622. wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
  623. wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
  624. wandb/vendor/pygments/lexers/actionscript.py +240 -0
  625. wandb/vendor/pygments/lexers/agile.py +24 -0
  626. wandb/vendor/pygments/lexers/algebra.py +221 -0
  627. wandb/vendor/pygments/lexers/ambient.py +76 -0
  628. wandb/vendor/pygments/lexers/ampl.py +87 -0
  629. wandb/vendor/pygments/lexers/apl.py +101 -0
  630. wandb/vendor/pygments/lexers/archetype.py +318 -0
  631. wandb/vendor/pygments/lexers/asm.py +641 -0
  632. wandb/vendor/pygments/lexers/automation.py +374 -0
  633. wandb/vendor/pygments/lexers/basic.py +500 -0
  634. wandb/vendor/pygments/lexers/bibtex.py +160 -0
  635. wandb/vendor/pygments/lexers/business.py +612 -0
  636. wandb/vendor/pygments/lexers/c_cpp.py +252 -0
  637. wandb/vendor/pygments/lexers/c_like.py +541 -0
  638. wandb/vendor/pygments/lexers/capnproto.py +78 -0
  639. wandb/vendor/pygments/lexers/chapel.py +102 -0
  640. wandb/vendor/pygments/lexers/clean.py +288 -0
  641. wandb/vendor/pygments/lexers/compiled.py +34 -0
  642. wandb/vendor/pygments/lexers/configs.py +833 -0
  643. wandb/vendor/pygments/lexers/console.py +114 -0
  644. wandb/vendor/pygments/lexers/crystal.py +393 -0
  645. wandb/vendor/pygments/lexers/csound.py +366 -0
  646. wandb/vendor/pygments/lexers/css.py +689 -0
  647. wandb/vendor/pygments/lexers/d.py +251 -0
  648. wandb/vendor/pygments/lexers/dalvik.py +125 -0
  649. wandb/vendor/pygments/lexers/data.py +555 -0
  650. wandb/vendor/pygments/lexers/diff.py +165 -0
  651. wandb/vendor/pygments/lexers/dotnet.py +691 -0
  652. wandb/vendor/pygments/lexers/dsls.py +878 -0
  653. wandb/vendor/pygments/lexers/dylan.py +289 -0
  654. wandb/vendor/pygments/lexers/ecl.py +125 -0
  655. wandb/vendor/pygments/lexers/eiffel.py +65 -0
  656. wandb/vendor/pygments/lexers/elm.py +121 -0
  657. wandb/vendor/pygments/lexers/erlang.py +533 -0
  658. wandb/vendor/pygments/lexers/esoteric.py +277 -0
  659. wandb/vendor/pygments/lexers/ezhil.py +69 -0
  660. wandb/vendor/pygments/lexers/factor.py +344 -0
  661. wandb/vendor/pygments/lexers/fantom.py +250 -0
  662. wandb/vendor/pygments/lexers/felix.py +273 -0
  663. wandb/vendor/pygments/lexers/forth.py +177 -0
  664. wandb/vendor/pygments/lexers/fortran.py +205 -0
  665. wandb/vendor/pygments/lexers/foxpro.py +428 -0
  666. wandb/vendor/pygments/lexers/functional.py +21 -0
  667. wandb/vendor/pygments/lexers/go.py +101 -0
  668. wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
  669. wandb/vendor/pygments/lexers/graph.py +80 -0
  670. wandb/vendor/pygments/lexers/graphics.py +553 -0
  671. wandb/vendor/pygments/lexers/haskell.py +843 -0
  672. wandb/vendor/pygments/lexers/haxe.py +936 -0
  673. wandb/vendor/pygments/lexers/hdl.py +382 -0
  674. wandb/vendor/pygments/lexers/hexdump.py +103 -0
  675. wandb/vendor/pygments/lexers/html.py +602 -0
  676. wandb/vendor/pygments/lexers/idl.py +270 -0
  677. wandb/vendor/pygments/lexers/igor.py +288 -0
  678. wandb/vendor/pygments/lexers/inferno.py +96 -0
  679. wandb/vendor/pygments/lexers/installers.py +322 -0
  680. wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
  681. wandb/vendor/pygments/lexers/iolang.py +63 -0
  682. wandb/vendor/pygments/lexers/j.py +146 -0
  683. wandb/vendor/pygments/lexers/javascript.py +1525 -0
  684. wandb/vendor/pygments/lexers/julia.py +333 -0
  685. wandb/vendor/pygments/lexers/jvm.py +1573 -0
  686. wandb/vendor/pygments/lexers/lisp.py +2621 -0
  687. wandb/vendor/pygments/lexers/make.py +202 -0
  688. wandb/vendor/pygments/lexers/markup.py +595 -0
  689. wandb/vendor/pygments/lexers/math.py +21 -0
  690. wandb/vendor/pygments/lexers/matlab.py +663 -0
  691. wandb/vendor/pygments/lexers/ml.py +769 -0
  692. wandb/vendor/pygments/lexers/modeling.py +358 -0
  693. wandb/vendor/pygments/lexers/modula2.py +1561 -0
  694. wandb/vendor/pygments/lexers/monte.py +204 -0
  695. wandb/vendor/pygments/lexers/ncl.py +894 -0
  696. wandb/vendor/pygments/lexers/nimrod.py +159 -0
  697. wandb/vendor/pygments/lexers/nit.py +64 -0
  698. wandb/vendor/pygments/lexers/nix.py +136 -0
  699. wandb/vendor/pygments/lexers/oberon.py +105 -0
  700. wandb/vendor/pygments/lexers/objective.py +504 -0
  701. wandb/vendor/pygments/lexers/ooc.py +85 -0
  702. wandb/vendor/pygments/lexers/other.py +41 -0
  703. wandb/vendor/pygments/lexers/parasail.py +79 -0
  704. wandb/vendor/pygments/lexers/parsers.py +835 -0
  705. wandb/vendor/pygments/lexers/pascal.py +644 -0
  706. wandb/vendor/pygments/lexers/pawn.py +199 -0
  707. wandb/vendor/pygments/lexers/perl.py +620 -0
  708. wandb/vendor/pygments/lexers/php.py +267 -0
  709. wandb/vendor/pygments/lexers/praat.py +294 -0
  710. wandb/vendor/pygments/lexers/prolog.py +306 -0
  711. wandb/vendor/pygments/lexers/python.py +939 -0
  712. wandb/vendor/pygments/lexers/qvt.py +152 -0
  713. wandb/vendor/pygments/lexers/r.py +453 -0
  714. wandb/vendor/pygments/lexers/rdf.py +270 -0
  715. wandb/vendor/pygments/lexers/rebol.py +431 -0
  716. wandb/vendor/pygments/lexers/resource.py +85 -0
  717. wandb/vendor/pygments/lexers/rnc.py +67 -0
  718. wandb/vendor/pygments/lexers/roboconf.py +82 -0
  719. wandb/vendor/pygments/lexers/robotframework.py +560 -0
  720. wandb/vendor/pygments/lexers/ruby.py +519 -0
  721. wandb/vendor/pygments/lexers/rust.py +220 -0
  722. wandb/vendor/pygments/lexers/sas.py +228 -0
  723. wandb/vendor/pygments/lexers/scripting.py +1222 -0
  724. wandb/vendor/pygments/lexers/shell.py +794 -0
  725. wandb/vendor/pygments/lexers/smalltalk.py +195 -0
  726. wandb/vendor/pygments/lexers/smv.py +79 -0
  727. wandb/vendor/pygments/lexers/snobol.py +83 -0
  728. wandb/vendor/pygments/lexers/special.py +103 -0
  729. wandb/vendor/pygments/lexers/sql.py +681 -0
  730. wandb/vendor/pygments/lexers/stata.py +108 -0
  731. wandb/vendor/pygments/lexers/supercollider.py +90 -0
  732. wandb/vendor/pygments/lexers/tcl.py +145 -0
  733. wandb/vendor/pygments/lexers/templates.py +2283 -0
  734. wandb/vendor/pygments/lexers/testing.py +207 -0
  735. wandb/vendor/pygments/lexers/text.py +25 -0
  736. wandb/vendor/pygments/lexers/textedit.py +169 -0
  737. wandb/vendor/pygments/lexers/textfmts.py +297 -0
  738. wandb/vendor/pygments/lexers/theorem.py +458 -0
  739. wandb/vendor/pygments/lexers/trafficscript.py +54 -0
  740. wandb/vendor/pygments/lexers/typoscript.py +226 -0
  741. wandb/vendor/pygments/lexers/urbi.py +133 -0
  742. wandb/vendor/pygments/lexers/varnish.py +190 -0
  743. wandb/vendor/pygments/lexers/verification.py +111 -0
  744. wandb/vendor/pygments/lexers/web.py +24 -0
  745. wandb/vendor/pygments/lexers/webmisc.py +988 -0
  746. wandb/vendor/pygments/lexers/whiley.py +116 -0
  747. wandb/vendor/pygments/lexers/x10.py +69 -0
  748. wandb/vendor/pygments/modeline.py +44 -0
  749. wandb/vendor/pygments/plugin.py +68 -0
  750. wandb/vendor/pygments/regexopt.py +92 -0
  751. wandb/vendor/pygments/scanner.py +105 -0
  752. wandb/vendor/pygments/sphinxext.py +158 -0
  753. wandb/vendor/pygments/style.py +155 -0
  754. wandb/vendor/pygments/styles/__init__.py +80 -0
  755. wandb/vendor/pygments/styles/abap.py +29 -0
  756. wandb/vendor/pygments/styles/algol.py +63 -0
  757. wandb/vendor/pygments/styles/algol_nu.py +63 -0
  758. wandb/vendor/pygments/styles/arduino.py +98 -0
  759. wandb/vendor/pygments/styles/autumn.py +65 -0
  760. wandb/vendor/pygments/styles/borland.py +51 -0
  761. wandb/vendor/pygments/styles/bw.py +49 -0
  762. wandb/vendor/pygments/styles/colorful.py +81 -0
  763. wandb/vendor/pygments/styles/default.py +73 -0
  764. wandb/vendor/pygments/styles/emacs.py +72 -0
  765. wandb/vendor/pygments/styles/friendly.py +72 -0
  766. wandb/vendor/pygments/styles/fruity.py +42 -0
  767. wandb/vendor/pygments/styles/igor.py +29 -0
  768. wandb/vendor/pygments/styles/lovelace.py +97 -0
  769. wandb/vendor/pygments/styles/manni.py +75 -0
  770. wandb/vendor/pygments/styles/monokai.py +106 -0
  771. wandb/vendor/pygments/styles/murphy.py +80 -0
  772. wandb/vendor/pygments/styles/native.py +65 -0
  773. wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
  774. wandb/vendor/pygments/styles/paraiso_light.py +125 -0
  775. wandb/vendor/pygments/styles/pastie.py +75 -0
  776. wandb/vendor/pygments/styles/perldoc.py +69 -0
  777. wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
  778. wandb/vendor/pygments/styles/rrt.py +33 -0
  779. wandb/vendor/pygments/styles/sas.py +44 -0
  780. wandb/vendor/pygments/styles/stata.py +40 -0
  781. wandb/vendor/pygments/styles/tango.py +141 -0
  782. wandb/vendor/pygments/styles/trac.py +63 -0
  783. wandb/vendor/pygments/styles/vim.py +63 -0
  784. wandb/vendor/pygments/styles/vs.py +38 -0
  785. wandb/vendor/pygments/styles/xcode.py +51 -0
  786. wandb/vendor/pygments/token.py +213 -0
  787. wandb/vendor/pygments/unistring.py +217 -0
  788. wandb/vendor/pygments/util.py +388 -0
  789. wandb/vendor/pynvml/__init__.py +0 -0
  790. wandb/vendor/pynvml/pynvml.py +4779 -0
  791. wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
  792. wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
  793. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
  794. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
  795. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
  796. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
  797. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
  798. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
  799. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
  800. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
  801. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
  802. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
  803. wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
  804. wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
  805. wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
  806. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
  807. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
  808. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
  809. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
  810. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
  811. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
  812. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
  813. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
  814. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
  815. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
  816. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
  817. wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
  818. wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
  819. wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
  820. wandb/wandb_agent.py +588 -0
  821. wandb/wandb_controller.py +721 -0
  822. wandb/wandb_run.py +9 -0
  823. wandb-0.18.2.dist-info/METADATA +213 -0
  824. wandb-0.18.2.dist-info/RECORD +827 -0
  825. wandb-0.18.2.dist-info/WHEEL +5 -0
  826. wandb-0.18.2.dist-info/entry_points.txt +3 -0
  827. wandb-0.18.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,972 @@
1
+ """Interface base class - Used to send messages to the internal process.
2
+
3
+ InterfaceBase: The abstract class
4
+ InterfaceShared: Common routines for socket and queue based implementations
5
+ InterfaceQueue: Use multiprocessing queues to send and receive messages
6
+ InterfaceSock: Use socket to send and receive messages
7
+ InterfaceRelay: Responses are routed to a relay queue (not matching uuids)
8
+
9
+ """
10
+
11
+ import gzip
12
+ import logging
13
+ import os
14
+ import sys
15
+ import time
16
+ from abc import abstractmethod
17
+ from pathlib import Path
18
+ from secrets import token_hex
19
+ from typing import (
20
+ TYPE_CHECKING,
21
+ Any,
22
+ Dict,
23
+ Iterable,
24
+ List,
25
+ NewType,
26
+ Optional,
27
+ Tuple,
28
+ Union,
29
+ )
30
+
31
+ from wandb import termwarn
32
+ from wandb.proto import wandb_internal_pb2 as pb
33
+ from wandb.proto import wandb_telemetry_pb2 as tpb
34
+ from wandb.sdk.artifacts.artifact import Artifact
35
+ from wandb.sdk.artifacts.artifact_manifest import ArtifactManifest
36
+ from wandb.sdk.artifacts.staging import get_staging_dir
37
+ from wandb.sdk.lib import json_util as json
38
+ from wandb.util import (
39
+ WandBJSONEncoderOld,
40
+ get_h5_typename,
41
+ json_dumps_safer,
42
+ json_dumps_safer_history,
43
+ json_friendly,
44
+ json_friendly_val,
45
+ maybe_compress_summary,
46
+ )
47
+
48
+ from ..data_types.utils import history_dict_to_json, val_to_json
49
+ from ..lib.mailbox import MailboxHandle
50
+ from . import summary_record as sr
51
+ from .message_future import MessageFuture
52
+
53
+ MANIFEST_FILE_SIZE_THRESHOLD = 100_000
54
+
55
+ GlobStr = NewType("GlobStr", str)
56
+
57
+ if sys.version_info >= (3, 8):
58
+ from typing import Literal, TypedDict
59
+ else:
60
+ from typing_extensions import Literal, TypedDict
61
+
62
+ PolicyName = Literal["now", "live", "end"]
63
+
64
+
65
+ class FilesDict(TypedDict):
66
+ files: Iterable[Tuple[GlobStr, PolicyName]]
67
+
68
+
69
+ if TYPE_CHECKING:
70
+ from ..wandb_run import Run
71
+
72
+
73
+ logger = logging.getLogger("wandb")
74
+
75
+
76
+ def file_policy_to_enum(policy: "PolicyName") -> "pb.FilesItem.PolicyType.V":
77
+ if policy == "now":
78
+ enum = pb.FilesItem.PolicyType.NOW
79
+ elif policy == "end":
80
+ enum = pb.FilesItem.PolicyType.END
81
+ elif policy == "live":
82
+ enum = pb.FilesItem.PolicyType.LIVE
83
+ return enum
84
+
85
+
86
+ def file_enum_to_policy(enum: "pb.FilesItem.PolicyType.V") -> "PolicyName":
87
+ if enum == pb.FilesItem.PolicyType.NOW:
88
+ policy: PolicyName = "now"
89
+ elif enum == pb.FilesItem.PolicyType.END:
90
+ policy = "end"
91
+ elif enum == pb.FilesItem.PolicyType.LIVE:
92
+ policy = "live"
93
+ return policy
94
+
95
+
96
+ class InterfaceBase:
97
+ _run: Optional["Run"]
98
+ _drop: bool
99
+
100
+ def __init__(self) -> None:
101
+ self._run = None
102
+ self._drop = False
103
+
104
+ def _hack_set_run(self, run: "Run") -> None:
105
+ self._run = run
106
+ current_pid = os.getpid()
107
+ self._run._set_iface_pid(current_pid)
108
+
109
+ def publish_header(self) -> None:
110
+ header = pb.HeaderRecord()
111
+ self._publish_header(header)
112
+
113
+ @abstractmethod
114
+ def _publish_header(self, header: pb.HeaderRecord) -> None:
115
+ raise NotImplementedError
116
+
117
+ def deliver_status(self) -> MailboxHandle:
118
+ return self._deliver_status(pb.StatusRequest())
119
+
120
+ @abstractmethod
121
+ def _deliver_status(
122
+ self,
123
+ status: pb.StatusRequest,
124
+ ) -> MailboxHandle:
125
+ raise NotImplementedError
126
+
127
+ def _make_config(
128
+ self,
129
+ data: Optional[dict] = None,
130
+ key: Optional[Union[Tuple[str, ...], str]] = None,
131
+ val: Optional[Any] = None,
132
+ obj: Optional[pb.ConfigRecord] = None,
133
+ ) -> pb.ConfigRecord:
134
+ config = obj or pb.ConfigRecord()
135
+ if data:
136
+ for k, v in data.items():
137
+ update = config.update.add()
138
+ update.key = k
139
+ update.value_json = json_dumps_safer(json_friendly(v)[0])
140
+ if key:
141
+ update = config.update.add()
142
+ if isinstance(key, tuple):
143
+ for k in key:
144
+ update.nested_key.append(k)
145
+ else:
146
+ update.key = key
147
+ update.value_json = json_dumps_safer(json_friendly(val)[0])
148
+ return config
149
+
150
+ def _make_run(self, run: "Run") -> pb.RunRecord:
151
+ proto_run = pb.RunRecord()
152
+ run._make_proto_run(proto_run)
153
+ if run._settings.host:
154
+ proto_run.host = run._settings.host
155
+ if run._config is not None:
156
+ config_dict = run._config._as_dict() # type: ignore
157
+ self._make_config(data=config_dict, obj=proto_run.config)
158
+ if run._telemetry_obj:
159
+ proto_run.telemetry.MergeFrom(run._telemetry_obj)
160
+ return proto_run
161
+
162
+ def publish_run(self, run: "Run") -> None:
163
+ run_record = self._make_run(run)
164
+ self._publish_run(run_record)
165
+
166
+ @abstractmethod
167
+ def _publish_run(self, run: pb.RunRecord) -> None:
168
+ raise NotImplementedError
169
+
170
+ def publish_cancel(self, cancel_slot: str) -> None:
171
+ cancel = pb.CancelRequest(cancel_slot=cancel_slot)
172
+ self._publish_cancel(cancel)
173
+
174
+ @abstractmethod
175
+ def _publish_cancel(self, cancel: pb.CancelRequest) -> None:
176
+ raise NotImplementedError
177
+
178
+ def publish_config(
179
+ self,
180
+ data: Optional[dict] = None,
181
+ key: Optional[Union[Tuple[str, ...], str]] = None,
182
+ val: Optional[Any] = None,
183
+ ) -> None:
184
+ cfg = self._make_config(data=data, key=key, val=val)
185
+
186
+ self._publish_config(cfg)
187
+
188
+ @abstractmethod
189
+ def _publish_config(self, cfg: pb.ConfigRecord) -> None:
190
+ raise NotImplementedError
191
+
192
+ @abstractmethod
193
+ def _publish_metric(self, metric: pb.MetricRecord) -> None:
194
+ raise NotImplementedError
195
+
196
+ def _make_summary_from_dict(self, summary_dict: dict) -> pb.SummaryRecord:
197
+ summary = pb.SummaryRecord()
198
+ for k, v in summary_dict.items():
199
+ update = summary.update.add()
200
+ update.key = k
201
+ update.value_json = json.dumps(v)
202
+ return summary
203
+
204
+ def _summary_encode(self, value: Any, path_from_root: str) -> dict:
205
+ """Normalize, compress, and encode sub-objects for backend storage.
206
+
207
+ value: Object to encode.
208
+ path_from_root: `str` dot separated string from the top-level summary to the
209
+ current `value`.
210
+
211
+ Returns:
212
+ A new tree of dict's with large objects replaced with dictionaries
213
+ with "_type" entries that say which type the original data was.
214
+ """
215
+ # Constructs a new `dict` tree in `json_value` that discards and/or
216
+ # encodes objects that aren't JSON serializable.
217
+
218
+ if isinstance(value, dict):
219
+ json_value = {}
220
+ for key, value in value.items(): # noqa: B020
221
+ json_value[key] = self._summary_encode(
222
+ value, path_from_root + "." + key
223
+ )
224
+ return json_value
225
+ else:
226
+ friendly_value, converted = json_friendly(
227
+ val_to_json(self._run, path_from_root, value, namespace="summary")
228
+ )
229
+ json_value, compressed = maybe_compress_summary(
230
+ friendly_value, get_h5_typename(value)
231
+ )
232
+ if compressed:
233
+ # TODO(jhr): impleement me
234
+ pass
235
+ # self.write_h5(path_from_root, friendly_value)
236
+
237
+ return json_value
238
+
239
+ def _make_summary(self, summary_record: sr.SummaryRecord) -> pb.SummaryRecord:
240
+ pb_summary_record = pb.SummaryRecord()
241
+
242
+ for item in summary_record.update:
243
+ pb_summary_item = pb_summary_record.update.add()
244
+ key_length = len(item.key)
245
+
246
+ assert key_length > 0
247
+
248
+ if key_length > 1:
249
+ pb_summary_item.nested_key.extend(item.key)
250
+ else:
251
+ pb_summary_item.key = item.key[0]
252
+
253
+ path_from_root = ".".join(item.key)
254
+ json_value = self._summary_encode(item.value, path_from_root)
255
+ json_value, _ = json_friendly(json_value) # type: ignore
256
+
257
+ pb_summary_item.value_json = json.dumps(
258
+ json_value,
259
+ cls=WandBJSONEncoderOld,
260
+ )
261
+
262
+ for item in summary_record.remove:
263
+ pb_summary_item = pb_summary_record.remove.add()
264
+ key_length = len(item.key)
265
+
266
+ assert key_length > 0
267
+
268
+ if key_length > 1:
269
+ pb_summary_item.nested_key.extend(item.key)
270
+ else:
271
+ pb_summary_item.key = item.key[0]
272
+
273
+ return pb_summary_record
274
+
275
+ def publish_summary(self, summary_record: sr.SummaryRecord) -> None:
276
+ pb_summary_record = self._make_summary(summary_record)
277
+ self._publish_summary(pb_summary_record)
278
+
279
+ @abstractmethod
280
+ def _publish_summary(self, summary: pb.SummaryRecord) -> None:
281
+ raise NotImplementedError
282
+
283
+ def _make_files(self, files_dict: "FilesDict") -> pb.FilesRecord:
284
+ files = pb.FilesRecord()
285
+ for path, policy in files_dict["files"]:
286
+ f = files.files.add()
287
+ f.path = path
288
+ f.policy = file_policy_to_enum(policy)
289
+ return files
290
+
291
+ def publish_files(self, files_dict: "FilesDict") -> None:
292
+ files = self._make_files(files_dict)
293
+ self._publish_files(files)
294
+
295
+ @abstractmethod
296
+ def _publish_files(self, files: pb.FilesRecord) -> None:
297
+ raise NotImplementedError
298
+
299
+ def publish_python_packages(self, working_set) -> None:
300
+ python_packages = pb.PythonPackagesRequest()
301
+ for pkg in working_set:
302
+ python_packages.package.add(name=pkg.key, version=pkg.version)
303
+ self._publish_python_packages(python_packages)
304
+
305
+ @abstractmethod
306
+ def _publish_python_packages(
307
+ self, python_packages: pb.PythonPackagesRequest
308
+ ) -> None:
309
+ raise NotImplementedError
310
+
311
+ def _make_artifact(self, artifact: "Artifact") -> pb.ArtifactRecord:
312
+ proto_artifact = pb.ArtifactRecord()
313
+ proto_artifact.type = artifact.type
314
+ proto_artifact.name = artifact.name
315
+ proto_artifact.client_id = artifact._client_id
316
+ proto_artifact.sequence_client_id = artifact._sequence_client_id
317
+ proto_artifact.digest = artifact.digest
318
+ if artifact.distributed_id:
319
+ proto_artifact.distributed_id = artifact.distributed_id
320
+ if artifact.description:
321
+ proto_artifact.description = artifact.description
322
+ if artifact.metadata:
323
+ proto_artifact.metadata = json.dumps(json_friendly_val(artifact.metadata))
324
+ if artifact._base_id:
325
+ proto_artifact.base_id = artifact._base_id
326
+
327
+ ttl_duration_input = artifact._ttl_duration_seconds_to_gql()
328
+ if ttl_duration_input:
329
+ proto_artifact.ttl_duration_seconds = ttl_duration_input
330
+ proto_artifact.incremental_beta1 = artifact.incremental
331
+ self._make_artifact_manifest(artifact.manifest, obj=proto_artifact.manifest)
332
+ return proto_artifact
333
+
334
+ def _make_artifact_manifest(
335
+ self,
336
+ artifact_manifest: ArtifactManifest,
337
+ obj: Optional[pb.ArtifactManifest] = None,
338
+ ) -> pb.ArtifactManifest:
339
+ proto_manifest = obj or pb.ArtifactManifest()
340
+ proto_manifest.version = artifact_manifest.version()
341
+ proto_manifest.storage_policy = artifact_manifest.storage_policy.name()
342
+
343
+ # Very large manifests need to be written to file to avoid protobuf size limits.
344
+ if len(artifact_manifest) > MANIFEST_FILE_SIZE_THRESHOLD:
345
+ path = self._write_artifact_manifest_file(artifact_manifest)
346
+ proto_manifest.manifest_file_path = path
347
+ return proto_manifest
348
+
349
+ for k, v in artifact_manifest.storage_policy.config().items() or {}.items():
350
+ cfg = proto_manifest.storage_policy_config.add()
351
+ cfg.key = k
352
+ cfg.value_json = json.dumps(v)
353
+
354
+ for entry in sorted(artifact_manifest.entries.values(), key=lambda k: k.path):
355
+ proto_entry = proto_manifest.contents.add()
356
+ proto_entry.path = entry.path
357
+ proto_entry.digest = entry.digest
358
+ if entry.size:
359
+ proto_entry.size = entry.size
360
+ if entry.birth_artifact_id:
361
+ proto_entry.birth_artifact_id = entry.birth_artifact_id
362
+ if entry.ref:
363
+ proto_entry.ref = entry.ref
364
+ if entry.local_path:
365
+ proto_entry.local_path = entry.local_path
366
+ proto_entry.skip_cache = entry.skip_cache
367
+ for k, v in entry.extra.items():
368
+ proto_extra = proto_entry.extra.add()
369
+ proto_extra.key = k
370
+ proto_extra.value_json = json.dumps(v)
371
+ return proto_manifest
372
+
373
+ def _write_artifact_manifest_file(self, manifest: ArtifactManifest) -> str:
374
+ manifest_dir = Path(get_staging_dir()) / "artifact_manifests"
375
+ manifest_dir.mkdir(parents=True, exist_ok=True)
376
+ # It would be simpler to use `manifest.to_json()`, but that gets very slow for
377
+ # large manifests since it encodes the whole thing as a single JSON object.
378
+ filename = f"{time.time()}_{token_hex(8)}.manifest_contents.jl.gz"
379
+ manifest_file_path = manifest_dir / filename
380
+ with gzip.open(manifest_file_path, mode="wt", compresslevel=1) as f:
381
+ for entry in manifest.entries.values():
382
+ f.write(f"{json.dumps(entry.to_json())}\n")
383
+ return str(manifest_file_path)
384
+
385
+ def deliver_link_artifact(
386
+ self,
387
+ run: "Run",
388
+ artifact: "Artifact",
389
+ portfolio_name: str,
390
+ aliases: Iterable[str],
391
+ entity: Optional[str] = None,
392
+ project: Optional[str] = None,
393
+ ) -> MailboxHandle:
394
+ link_artifact = pb.LinkArtifactRequest()
395
+ if artifact.is_draft():
396
+ link_artifact.client_id = artifact._client_id
397
+ else:
398
+ link_artifact.server_id = artifact.id if artifact.id else ""
399
+ link_artifact.portfolio_name = portfolio_name
400
+ link_artifact.portfolio_entity = entity or run.entity
401
+ link_artifact.portfolio_project = project or run.project
402
+ link_artifact.portfolio_aliases.extend(aliases)
403
+
404
+ return self._deliver_link_artifact(link_artifact)
405
+
406
+ @abstractmethod
407
+ def _deliver_link_artifact(
408
+ self, link_artifact: pb.LinkArtifactRequest
409
+ ) -> MailboxHandle:
410
+ raise NotImplementedError
411
+
412
+ @staticmethod
413
+ def _make_partial_source_str(
414
+ source: Any, job_info: Dict[str, Any], metadata: Dict[str, Any]
415
+ ) -> str:
416
+ """Construct use_artifact.partial.source_info.source as str."""
417
+ source_type = job_info.get("source_type", "").strip()
418
+ if source_type == "artifact":
419
+ info_source = job_info.get("source", {})
420
+ source.artifact.artifact = info_source.get("artifact", "")
421
+ source.artifact.entrypoint.extend(info_source.get("entrypoint", []))
422
+ source.artifact.notebook = info_source.get("notebook", False)
423
+ build_context = info_source.get("build_context")
424
+ if build_context:
425
+ source.artifact.build_context = build_context
426
+ dockerfile = info_source.get("dockerfile")
427
+ if dockerfile:
428
+ source.artifact.dockerfile = dockerfile
429
+ elif source_type == "repo":
430
+ source.git.git_info.remote = metadata.get("git", {}).get("remote", "")
431
+ source.git.git_info.commit = metadata.get("git", {}).get("commit", "")
432
+ source.git.entrypoint.extend(metadata.get("entrypoint", []))
433
+ source.git.notebook = metadata.get("notebook", False)
434
+ build_context = metadata.get("build_context")
435
+ if build_context:
436
+ source.git.build_context = build_context
437
+ dockerfile = metadata.get("dockerfile")
438
+ if dockerfile:
439
+ source.git.dockerfile = dockerfile
440
+ elif source_type == "image":
441
+ source.image.image = metadata.get("docker", "")
442
+ else:
443
+ raise ValueError("Invalid source type")
444
+
445
+ source_str: str = source.SerializeToString()
446
+ return source_str
447
+
448
+ def _make_proto_use_artifact(
449
+ self,
450
+ use_artifact: pb.UseArtifactRecord,
451
+ job_name: str,
452
+ job_info: Dict[str, Any],
453
+ metadata: Dict[str, Any],
454
+ ) -> pb.UseArtifactRecord:
455
+ use_artifact.partial.job_name = job_name
456
+ use_artifact.partial.source_info._version = job_info.get("_version", "")
457
+ use_artifact.partial.source_info.source_type = job_info.get("source_type", "")
458
+ use_artifact.partial.source_info.runtime = job_info.get("runtime", "")
459
+
460
+ src_str = self._make_partial_source_str(
461
+ source=use_artifact.partial.source_info.source,
462
+ job_info=job_info,
463
+ metadata=metadata,
464
+ )
465
+ use_artifact.partial.source_info.source.ParseFromString(src_str) # type: ignore[arg-type]
466
+
467
+ return use_artifact
468
+
469
+ def publish_use_artifact(
470
+ self,
471
+ artifact: "Artifact",
472
+ ) -> None:
473
+ assert artifact.id is not None, "Artifact must have an id"
474
+
475
+ use_artifact = pb.UseArtifactRecord(
476
+ id=artifact.id,
477
+ type=artifact.type,
478
+ name=artifact.name,
479
+ )
480
+
481
+ # TODO(gst): move to internal process
482
+ if "_partial" in artifact.metadata:
483
+ # Download source info from logged partial job artifact
484
+ job_info = {}
485
+ try:
486
+ path = artifact.get_entry("wandb-job.json").download()
487
+ with open(path) as f:
488
+ job_info = json.load(f)
489
+
490
+ except Exception as e:
491
+ logger.warning(
492
+ f"Failed to download partial job info from artifact {artifact}, : {e}"
493
+ )
494
+ termwarn(
495
+ f"Failed to download partial job info from artifact {artifact}, : {e}"
496
+ )
497
+ return
498
+
499
+ try:
500
+ use_artifact = self._make_proto_use_artifact(
501
+ use_artifact=use_artifact,
502
+ job_name=artifact.name,
503
+ job_info=job_info,
504
+ metadata=artifact.metadata,
505
+ )
506
+ except Exception as e:
507
+ logger.warning(f"Failed to construct use artifact proto: {e}")
508
+ termwarn(f"Failed to construct use artifact proto: {e}")
509
+ return
510
+
511
+ self._publish_use_artifact(use_artifact)
512
+
513
+ @abstractmethod
514
+ def _publish_use_artifact(self, proto_artifact: pb.UseArtifactRecord) -> None:
515
+ raise NotImplementedError
516
+
517
+ def communicate_artifact(
518
+ self,
519
+ run: "Run",
520
+ artifact: "Artifact",
521
+ aliases: Iterable[str],
522
+ tags: Optional[Iterable[str]] = None,
523
+ history_step: Optional[int] = None,
524
+ is_user_created: bool = False,
525
+ use_after_commit: bool = False,
526
+ finalize: bool = True,
527
+ ) -> MessageFuture:
528
+ proto_run = self._make_run(run)
529
+ proto_artifact = self._make_artifact(artifact)
530
+ proto_artifact.run_id = proto_run.run_id
531
+ proto_artifact.project = proto_run.project
532
+ proto_artifact.entity = proto_run.entity
533
+ proto_artifact.user_created = is_user_created
534
+ proto_artifact.use_after_commit = use_after_commit
535
+ proto_artifact.finalize = finalize
536
+
537
+ proto_artifact.aliases.extend(aliases or [])
538
+ proto_artifact.tags.extend(tags or [])
539
+
540
+ log_artifact = pb.LogArtifactRequest()
541
+ log_artifact.artifact.CopyFrom(proto_artifact)
542
+ if history_step is not None:
543
+ log_artifact.history_step = history_step
544
+ log_artifact.staging_dir = get_staging_dir()
545
+ resp = self._communicate_artifact(log_artifact)
546
+ return resp
547
+
548
+ @abstractmethod
549
+ def _communicate_artifact(
550
+ self, log_artifact: pb.LogArtifactRequest
551
+ ) -> MessageFuture:
552
+ raise NotImplementedError
553
+
554
+ def deliver_download_artifact(
555
+ self,
556
+ artifact_id: str,
557
+ download_root: str,
558
+ allow_missing_references: bool,
559
+ skip_cache: bool,
560
+ path_prefix: Optional[str],
561
+ ) -> MailboxHandle:
562
+ download_artifact = pb.DownloadArtifactRequest()
563
+ download_artifact.artifact_id = artifact_id
564
+ download_artifact.download_root = download_root
565
+ download_artifact.allow_missing_references = allow_missing_references
566
+ download_artifact.skip_cache = skip_cache
567
+ download_artifact.path_prefix = path_prefix or ""
568
+ resp = self._deliver_download_artifact(download_artifact)
569
+ return resp
570
+
571
+ @abstractmethod
572
+ def _deliver_download_artifact(
573
+ self, download_artifact: pb.DownloadArtifactRequest
574
+ ) -> MailboxHandle:
575
+ raise NotImplementedError
576
+
577
+ def publish_artifact(
578
+ self,
579
+ run: "Run",
580
+ artifact: "Artifact",
581
+ aliases: Iterable[str],
582
+ tags: Optional[Iterable[str]] = None,
583
+ is_user_created: bool = False,
584
+ use_after_commit: bool = False,
585
+ finalize: bool = True,
586
+ ) -> None:
587
+ proto_run = self._make_run(run)
588
+ proto_artifact = self._make_artifact(artifact)
589
+ proto_artifact.run_id = proto_run.run_id
590
+ proto_artifact.project = proto_run.project
591
+ proto_artifact.entity = proto_run.entity
592
+ proto_artifact.user_created = is_user_created
593
+ proto_artifact.use_after_commit = use_after_commit
594
+ proto_artifact.finalize = finalize
595
+ proto_artifact.aliases.extend(aliases or [])
596
+ proto_artifact.tags.extend(tags or [])
597
+ self._publish_artifact(proto_artifact)
598
+
599
+ @abstractmethod
600
+ def _publish_artifact(self, proto_artifact: pb.ArtifactRecord) -> None:
601
+ raise NotImplementedError
602
+
603
+ def publish_tbdata(self, log_dir: str, save: bool, root_logdir: str = "") -> None:
604
+ tbrecord = pb.TBRecord()
605
+ tbrecord.log_dir = log_dir
606
+ tbrecord.save = save
607
+ tbrecord.root_dir = root_logdir
608
+ self._publish_tbdata(tbrecord)
609
+
610
+ @abstractmethod
611
+ def _publish_tbdata(self, tbrecord: pb.TBRecord) -> None:
612
+ raise NotImplementedError
613
+
614
+ @abstractmethod
615
+ def _publish_telemetry(self, telem: tpb.TelemetryRecord) -> None:
616
+ raise NotImplementedError
617
+
618
+ def publish_partial_history(
619
+ self,
620
+ data: dict,
621
+ user_step: int,
622
+ step: Optional[int] = None,
623
+ flush: Optional[bool] = None,
624
+ publish_step: bool = True,
625
+ run: Optional["Run"] = None,
626
+ ) -> None:
627
+ run = run or self._run
628
+
629
+ data = history_dict_to_json(run, data, step=user_step, ignore_copy_err=True)
630
+ data.pop("_step", None)
631
+
632
+ # add timestamp to the history request, if not already present
633
+ # the timestamp might come from the tensorboard log logic
634
+ if "_timestamp" not in data:
635
+ data["_timestamp"] = time.time()
636
+
637
+ partial_history = pb.PartialHistoryRequest()
638
+ for k, v in data.items():
639
+ item = partial_history.item.add()
640
+ item.key = k
641
+ item.value_json = json_dumps_safer_history(v)
642
+
643
+ if publish_step and step is not None:
644
+ partial_history.step.num = step
645
+ if flush is not None:
646
+ partial_history.action.flush = flush
647
+ self._publish_partial_history(partial_history)
648
+
649
+ @abstractmethod
650
+ def _publish_partial_history(self, history: pb.PartialHistoryRequest) -> None:
651
+ raise NotImplementedError
652
+
653
+ def publish_history(
654
+ self,
655
+ data: dict,
656
+ step: Optional[int] = None,
657
+ run: Optional["Run"] = None,
658
+ publish_step: bool = True,
659
+ ) -> None:
660
+ run = run or self._run
661
+ data = history_dict_to_json(run, data, step=step)
662
+ history = pb.HistoryRecord()
663
+ if publish_step:
664
+ assert step is not None
665
+ history.step.num = step
666
+ data.pop("_step", None)
667
+ for k, v in data.items():
668
+ item = history.item.add()
669
+ item.key = k
670
+ item.value_json = json_dumps_safer_history(v)
671
+ self._publish_history(history)
672
+
673
+ @abstractmethod
674
+ def _publish_history(self, history: pb.HistoryRecord) -> None:
675
+ raise NotImplementedError
676
+
677
+ def publish_preempting(self) -> None:
678
+ preempt_rec = pb.RunPreemptingRecord()
679
+ self._publish_preempting(preempt_rec)
680
+
681
+ @abstractmethod
682
+ def _publish_preempting(self, preempt_rec: pb.RunPreemptingRecord) -> None:
683
+ raise NotImplementedError
684
+
685
+ def publish_output(self, name: str, data: str) -> None:
686
+ # from vendor.protobuf import google3.protobuf.timestamp
687
+ # ts = timestamp.Timestamp()
688
+ # ts.GetCurrentTime()
689
+ # now = datetime.now()
690
+ if name == "stdout":
691
+ otype = pb.OutputRecord.OutputType.STDOUT
692
+ elif name == "stderr":
693
+ otype = pb.OutputRecord.OutputType.STDERR
694
+ else:
695
+ # TODO(jhr): throw error?
696
+ print("unknown type")
697
+ o = pb.OutputRecord(output_type=otype, line=data)
698
+ o.timestamp.GetCurrentTime()
699
+ self._publish_output(o)
700
+
701
+ @abstractmethod
702
+ def _publish_output(self, outdata: pb.OutputRecord) -> None:
703
+ raise NotImplementedError
704
+
705
+ def publish_output_raw(self, name: str, data: str) -> None:
706
+ # from vendor.protobuf import google3.protobuf.timestamp
707
+ # ts = timestamp.Timestamp()
708
+ # ts.GetCurrentTime()
709
+ # now = datetime.now()
710
+ if name == "stdout":
711
+ otype = pb.OutputRawRecord.OutputType.STDOUT
712
+ elif name == "stderr":
713
+ otype = pb.OutputRawRecord.OutputType.STDERR
714
+ else:
715
+ # TODO(jhr): throw error?
716
+ print("unknown type")
717
+ o = pb.OutputRawRecord(output_type=otype, line=data)
718
+ o.timestamp.GetCurrentTime()
719
+ self._publish_output_raw(o)
720
+
721
+ @abstractmethod
722
+ def _publish_output_raw(self, outdata: pb.OutputRawRecord) -> None:
723
+ raise NotImplementedError
724
+
725
+ def publish_pause(self) -> None:
726
+ pause = pb.PauseRequest()
727
+ self._publish_pause(pause)
728
+
729
+ @abstractmethod
730
+ def _publish_pause(self, pause: pb.PauseRequest) -> None:
731
+ raise NotImplementedError
732
+
733
+ def publish_resume(self) -> None:
734
+ resume = pb.ResumeRequest()
735
+ self._publish_resume(resume)
736
+
737
+ @abstractmethod
738
+ def _publish_resume(self, resume: pb.ResumeRequest) -> None:
739
+ raise NotImplementedError
740
+
741
+ def publish_alert(
742
+ self, title: str, text: str, level: str, wait_duration: int
743
+ ) -> None:
744
+ proto_alert = pb.AlertRecord()
745
+ proto_alert.title = title
746
+ proto_alert.text = text
747
+ proto_alert.level = level
748
+ proto_alert.wait_duration = wait_duration
749
+ self._publish_alert(proto_alert)
750
+
751
+ @abstractmethod
752
+ def _publish_alert(self, alert: pb.AlertRecord) -> None:
753
+ raise NotImplementedError
754
+
755
+ def _make_exit(self, exit_code: Optional[int]) -> pb.RunExitRecord:
756
+ exit = pb.RunExitRecord()
757
+ if exit_code is not None:
758
+ exit.exit_code = exit_code
759
+ return exit
760
+
761
+ def publish_exit(self, exit_code: Optional[int]) -> None:
762
+ exit_data = self._make_exit(exit_code)
763
+ self._publish_exit(exit_data)
764
+
765
+ @abstractmethod
766
+ def _publish_exit(self, exit_data: pb.RunExitRecord) -> None:
767
+ raise NotImplementedError
768
+
769
+ def publish_keepalive(self) -> None:
770
+ keepalive = pb.KeepaliveRequest()
771
+ self._publish_keepalive(keepalive)
772
+
773
+ @abstractmethod
774
+ def _publish_keepalive(self, keepalive: pb.KeepaliveRequest) -> None:
775
+ raise NotImplementedError
776
+
777
+ def publish_job_input(
778
+ self,
779
+ include_paths: List[List[str]],
780
+ exclude_paths: List[List[str]],
781
+ input_schema: Optional[dict],
782
+ run_config: bool = False,
783
+ file_path: str = "",
784
+ ):
785
+ """Publishes a request to add inputs to the job.
786
+
787
+ If run_config is True, the wandb.config will be added as a job input.
788
+ If file_path is provided, the file at file_path will be added as a job
789
+ input.
790
+
791
+ The paths provided as arguments are sequences of dictionary keys that
792
+ specify a path within the wandb.config. If a path is included, the
793
+ corresponding field will be treated as a job input. If a path is
794
+ excluded, the corresponding field will not be treated as a job input.
795
+
796
+ Args:
797
+ include_paths: paths within config to include as job inputs.
798
+ exclude_paths: paths within config to exclude as job inputs.
799
+ input_schema: A JSON Schema describing which attributes will be
800
+ editable from the Launch drawer.
801
+ run_config: bool indicating whether wandb.config is the input source.
802
+ file_path: path to file to include as a job input.
803
+ """
804
+ if run_config and file_path:
805
+ raise ValueError(
806
+ "run_config and file_path are mutually exclusive arguments."
807
+ )
808
+ request = pb.JobInputRequest()
809
+ include_records = [pb.JobInputPath(path=path) for path in include_paths]
810
+ exclude_records = [pb.JobInputPath(path=path) for path in exclude_paths]
811
+ request.include_paths.extend(include_records)
812
+ request.exclude_paths.extend(exclude_records)
813
+ source = pb.JobInputSource(
814
+ run_config=pb.JobInputSource.RunConfigSource(),
815
+ )
816
+ if run_config:
817
+ source.run_config.CopyFrom(pb.JobInputSource.RunConfigSource())
818
+ else:
819
+ source.file.CopyFrom(
820
+ pb.JobInputSource.ConfigFileSource(path=file_path),
821
+ )
822
+ request.input_source.CopyFrom(source)
823
+ if input_schema:
824
+ request.input_schema = json_dumps_safer(input_schema)
825
+
826
+ return self._publish_job_input(request)
827
+
828
+ @abstractmethod
829
+ def _publish_job_input(self, request: pb.JobInputRequest) -> MailboxHandle:
830
+ raise NotImplementedError
831
+
832
+ def join(self) -> None:
833
+ # Drop indicates that the internal process has already been shutdown
834
+ if self._drop:
835
+ return
836
+ _ = self._communicate_shutdown()
837
+
838
+ @abstractmethod
839
+ def _communicate_shutdown(self) -> None:
840
+ raise NotImplementedError
841
+
842
+ def deliver_run(self, run: "Run") -> MailboxHandle:
843
+ run_record = self._make_run(run)
844
+ return self._deliver_run(run_record)
845
+
846
+ def deliver_sync(
847
+ self,
848
+ start_offset: int,
849
+ final_offset: int,
850
+ entity: Optional[str] = None,
851
+ project: Optional[str] = None,
852
+ run_id: Optional[str] = None,
853
+ skip_output_raw: Optional[bool] = None,
854
+ ) -> MailboxHandle:
855
+ sync = pb.SyncRequest(
856
+ start_offset=start_offset,
857
+ final_offset=final_offset,
858
+ )
859
+ if entity:
860
+ sync.overwrite.entity = entity
861
+ if project:
862
+ sync.overwrite.project = project
863
+ if run_id:
864
+ sync.overwrite.run_id = run_id
865
+ if skip_output_raw:
866
+ sync.skip.output_raw = skip_output_raw
867
+ return self._deliver_sync(sync)
868
+
869
+ @abstractmethod
870
+ def _deliver_sync(self, sync: pb.SyncRequest) -> MailboxHandle:
871
+ raise NotImplementedError
872
+
873
+ @abstractmethod
874
+ def _deliver_run(self, run: pb.RunRecord) -> MailboxHandle:
875
+ raise NotImplementedError
876
+
877
+ def deliver_run_start(self, run_pb: pb.RunRecord) -> MailboxHandle:
878
+ run_start = pb.RunStartRequest()
879
+ run_start.run.CopyFrom(run_pb)
880
+ return self._deliver_run_start(run_start)
881
+
882
+ @abstractmethod
883
+ def _deliver_run_start(self, run_start: pb.RunStartRequest) -> MailboxHandle:
884
+ raise NotImplementedError
885
+
886
+ def deliver_attach(self, attach_id: str) -> MailboxHandle:
887
+ attach = pb.AttachRequest(attach_id=attach_id)
888
+ return self._deliver_attach(attach)
889
+
890
+ @abstractmethod
891
+ def _deliver_attach(self, status: pb.AttachRequest) -> MailboxHandle:
892
+ raise NotImplementedError
893
+
894
+ def deliver_stop_status(self) -> MailboxHandle:
895
+ status = pb.StopStatusRequest()
896
+ return self._deliver_stop_status(status)
897
+
898
+ @abstractmethod
899
+ def _deliver_stop_status(self, status: pb.StopStatusRequest) -> MailboxHandle:
900
+ raise NotImplementedError
901
+
902
+ def deliver_network_status(self) -> MailboxHandle:
903
+ status = pb.NetworkStatusRequest()
904
+ return self._deliver_network_status(status)
905
+
906
+ @abstractmethod
907
+ def _deliver_network_status(self, status: pb.NetworkStatusRequest) -> MailboxHandle:
908
+ raise NotImplementedError
909
+
910
+ def deliver_internal_messages(self) -> MailboxHandle:
911
+ internal_message = pb.InternalMessagesRequest()
912
+ return self._deliver_internal_messages(internal_message)
913
+
914
+ @abstractmethod
915
+ def _deliver_internal_messages(
916
+ self, internal_message: pb.InternalMessagesRequest
917
+ ) -> MailboxHandle:
918
+ raise NotImplementedError
919
+
920
+ def deliver_get_summary(self) -> MailboxHandle:
921
+ get_summary = pb.GetSummaryRequest()
922
+ return self._deliver_get_summary(get_summary)
923
+
924
+ @abstractmethod
925
+ def _deliver_get_summary(self, get_summary: pb.GetSummaryRequest) -> MailboxHandle:
926
+ raise NotImplementedError
927
+
928
+ def deliver_get_system_metrics(self) -> MailboxHandle:
929
+ get_summary = pb.GetSystemMetricsRequest()
930
+ return self._deliver_get_system_metrics(get_summary)
931
+
932
+ @abstractmethod
933
+ def _deliver_get_system_metrics(
934
+ self, get_summary: pb.GetSystemMetricsRequest
935
+ ) -> MailboxHandle:
936
+ raise NotImplementedError
937
+
938
+ def deliver_exit(self, exit_code: Optional[int]) -> MailboxHandle:
939
+ exit_data = self._make_exit(exit_code)
940
+ return self._deliver_exit(exit_data)
941
+
942
+ @abstractmethod
943
+ def _deliver_exit(self, exit_data: pb.RunExitRecord) -> MailboxHandle:
944
+ raise NotImplementedError
945
+
946
+ def deliver_poll_exit(self) -> MailboxHandle:
947
+ poll_exit = pb.PollExitRequest()
948
+ return self._deliver_poll_exit(poll_exit)
949
+
950
+ @abstractmethod
951
+ def _deliver_poll_exit(self, poll_exit: pb.PollExitRequest) -> MailboxHandle:
952
+ raise NotImplementedError
953
+
954
+ def deliver_request_sampled_history(self) -> MailboxHandle:
955
+ sampled_history = pb.SampledHistoryRequest()
956
+ return self._deliver_request_sampled_history(sampled_history)
957
+
958
+ @abstractmethod
959
+ def _deliver_request_sampled_history(
960
+ self, sampled_history: pb.SampledHistoryRequest
961
+ ) -> MailboxHandle:
962
+ raise NotImplementedError
963
+
964
+ def deliver_request_run_status(self) -> MailboxHandle:
965
+ run_status = pb.RunStatusRequest()
966
+ return self._deliver_request_run_status(run_status)
967
+
968
+ @abstractmethod
969
+ def _deliver_request_run_status(
970
+ self, run_status: pb.RunStatusRequest
971
+ ) -> MailboxHandle:
972
+ raise NotImplementedError