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,914 @@
1
+ """Public API: runs."""
2
+
3
+ import json
4
+ import os
5
+ import sys
6
+ import tempfile
7
+ import time
8
+ import urllib
9
+ from typing import TYPE_CHECKING, Any, Collection, Dict, List, Mapping, Optional
10
+
11
+ if sys.version_info >= (3, 8):
12
+ from typing import Literal
13
+ else:
14
+ from typing_extensions import Literal
15
+
16
+ from wandb_gql import gql
17
+
18
+ import wandb
19
+ from wandb import env, util
20
+ from wandb.apis import public
21
+ from wandb.apis.attrs import Attrs
22
+ from wandb.apis.internal import Api as InternalApi
23
+ from wandb.apis.normalize import normalize_exceptions
24
+ from wandb.apis.paginator import Paginator
25
+ from wandb.apis.public.const import RETRY_TIMEDELTA
26
+ from wandb.sdk.lib import ipython, json_util, runid
27
+ from wandb.sdk.lib.paths import LogicalPath
28
+
29
+ if TYPE_CHECKING:
30
+ from wandb.apis.public import RetryingClient
31
+
32
+ WANDB_INTERNAL_KEYS = {"_wandb", "wandb_version"}
33
+
34
+ RUN_FRAGMENT = """fragment RunFragment on Run {
35
+ id
36
+ tags
37
+ name
38
+ displayName
39
+ sweepName
40
+ state
41
+ config
42
+ group
43
+ jobType
44
+ commit
45
+ readOnly
46
+ createdAt
47
+ heartbeatAt
48
+ description
49
+ notes
50
+ systemMetrics
51
+ summaryMetrics
52
+ historyLineCount
53
+ user {
54
+ name
55
+ username
56
+ }
57
+ historyKeys
58
+ }"""
59
+
60
+
61
+ class Runs(Paginator):
62
+ """An iterable collection of runs associated with a project and optional filter.
63
+
64
+ This is generally used indirectly via the `Api`.runs method.
65
+ """
66
+
67
+ QUERY = gql(
68
+ """
69
+ query Runs($project: String!, $entity: String!, $cursor: String, $perPage: Int = 50, $order: String, $filters: JSONString) {{
70
+ project(name: $project, entityName: $entity) {{
71
+ runCount(filters: $filters)
72
+ readOnly
73
+ runs(filters: $filters, after: $cursor, first: $perPage, order: $order) {{
74
+ edges {{
75
+ node {{
76
+ ...RunFragment
77
+ }}
78
+ cursor
79
+ }}
80
+ pageInfo {{
81
+ endCursor
82
+ hasNextPage
83
+ }}
84
+ }}
85
+ }}
86
+ }}
87
+ {}
88
+ """.format(RUN_FRAGMENT)
89
+ )
90
+
91
+ def __init__(
92
+ self,
93
+ client: "RetryingClient",
94
+ entity: str,
95
+ project: str,
96
+ filters: Optional[Dict[str, Any]] = None,
97
+ order: Optional[str] = None,
98
+ per_page: int = 50,
99
+ include_sweeps: bool = True,
100
+ ):
101
+ self.entity = entity
102
+ self.project = project
103
+ self.filters = filters or {}
104
+ self.order = order
105
+ self._sweeps = {}
106
+ self._include_sweeps = include_sweeps
107
+ variables = {
108
+ "project": self.project,
109
+ "entity": self.entity,
110
+ "order": self.order,
111
+ "filters": json.dumps(self.filters),
112
+ }
113
+ super().__init__(client, variables, per_page)
114
+
115
+ @property
116
+ def length(self):
117
+ if self.last_response:
118
+ return self.last_response["project"]["runCount"]
119
+ else:
120
+ return None
121
+
122
+ @property
123
+ def more(self):
124
+ if self.last_response:
125
+ return self.last_response["project"]["runs"]["pageInfo"]["hasNextPage"]
126
+ else:
127
+ return True
128
+
129
+ @property
130
+ def cursor(self):
131
+ if self.last_response:
132
+ return self.last_response["project"]["runs"]["edges"][-1]["cursor"]
133
+ else:
134
+ return None
135
+
136
+ def convert_objects(self):
137
+ objs = []
138
+ if self.last_response is None or self.last_response.get("project") is None:
139
+ raise ValueError("Could not find project {}".format(self.project))
140
+ for run_response in self.last_response["project"]["runs"]["edges"]:
141
+ run = Run(
142
+ self.client,
143
+ self.entity,
144
+ self.project,
145
+ run_response["node"]["name"],
146
+ run_response["node"],
147
+ include_sweeps=self._include_sweeps,
148
+ )
149
+ objs.append(run)
150
+
151
+ if self._include_sweeps and run.sweep_name:
152
+ if run.sweep_name in self._sweeps:
153
+ sweep = self._sweeps[run.sweep_name]
154
+ else:
155
+ sweep = public.Sweep.get(
156
+ self.client,
157
+ self.entity,
158
+ self.project,
159
+ run.sweep_name,
160
+ withRuns=False,
161
+ )
162
+ self._sweeps[run.sweep_name] = sweep
163
+
164
+ if sweep is None:
165
+ continue
166
+ run.sweep = sweep
167
+
168
+ return objs
169
+
170
+ @normalize_exceptions
171
+ def histories(
172
+ self,
173
+ samples: int = 500,
174
+ keys: Optional[List[str]] = None,
175
+ x_axis: str = "_step",
176
+ format: Literal["default", "pandas", "polars"] = "default",
177
+ stream: Literal["default", "system"] = "default",
178
+ ):
179
+ """Return sampled history metrics for all runs that fit the filters conditions.
180
+
181
+ Arguments:
182
+ samples : (int, optional) The number of samples to return per run
183
+ keys : (list[str], optional) Only return metrics for specific keys
184
+ x_axis : (str, optional) Use this metric as the xAxis defaults to _step
185
+ format : (Literal, optional) Format to return data in, options are "default", "pandas", "polars"
186
+ stream : (Literal, optional) "default" for metrics, "system" for machine metrics
187
+ Returns:
188
+ pandas.DataFrame: If format="pandas", returns a `pandas.DataFrame` of history metrics.
189
+ polars.DataFrame: If format="polars", returns a `polars.DataFrame` of history metrics.
190
+ list of dicts: If format="default", returns a list of dicts containing history metrics with a run_id key.
191
+ """
192
+ if format not in ("default", "pandas", "polars"):
193
+ raise ValueError(
194
+ f"Invalid format: {format}. Must be one of 'default', 'pandas', 'polars'"
195
+ )
196
+
197
+ histories = []
198
+
199
+ if format == "default":
200
+ for run in self:
201
+ history_data = run.history(
202
+ samples=samples,
203
+ keys=keys,
204
+ x_axis=x_axis,
205
+ pandas=False,
206
+ stream=stream,
207
+ )
208
+ if not history_data:
209
+ continue
210
+ for entry in history_data:
211
+ entry["run_id"] = run.id
212
+ histories.extend(history_data)
213
+
214
+ return histories
215
+
216
+ if format == "pandas":
217
+ pd = util.get_module(
218
+ "pandas", required="Exporting pandas DataFrame requires pandas"
219
+ )
220
+ for run in self:
221
+ history_data = run.history(
222
+ samples=samples,
223
+ keys=keys,
224
+ x_axis=x_axis,
225
+ pandas=False,
226
+ stream=stream,
227
+ )
228
+ if not history_data:
229
+ continue
230
+ df = pd.DataFrame.from_records(history_data)
231
+ df["run_id"] = run.id
232
+ histories.append(df)
233
+ if not histories:
234
+ return pd.DataFrame()
235
+ combined_df = pd.concat(histories)
236
+ combined_df.sort_values("run_id", inplace=True)
237
+ combined_df.reset_index(drop=True, inplace=True)
238
+ # sort columns for consistency
239
+ combined_df = combined_df[(sorted(combined_df.columns))]
240
+
241
+ return combined_df
242
+
243
+ if format == "polars":
244
+ pl = util.get_module(
245
+ "polars", required="Exporting polars DataFrame requires polars"
246
+ )
247
+ for run in self:
248
+ history_data = run.history(
249
+ samples=samples,
250
+ keys=keys,
251
+ x_axis=x_axis,
252
+ pandas=False,
253
+ stream=stream,
254
+ )
255
+ if not history_data:
256
+ continue
257
+ df = pl.from_records(history_data)
258
+ df = df.with_columns(pl.lit(run.id).alias("run_id"))
259
+ histories.append(df)
260
+ if not histories:
261
+ return pl.DataFrame()
262
+ combined_df = pl.concat(histories, how="align")
263
+ # sort columns for consistency
264
+ combined_df = combined_df.select(sorted(combined_df.columns)).sort("run_id")
265
+
266
+ return combined_df
267
+
268
+ def __repr__(self):
269
+ return f"<Runs {self.entity}/{self.project}>"
270
+
271
+
272
+ class Run(Attrs):
273
+ """A single run associated with an entity and project.
274
+
275
+ Attributes:
276
+ tags ([str]): a list of tags associated with the run
277
+ url (str): the url of this run
278
+ id (str): unique identifier for the run (defaults to eight characters)
279
+ name (str): the name of the run
280
+ state (str): one of: running, finished, crashed, killed, preempting, preempted
281
+ config (dict): a dict of hyperparameters associated with the run
282
+ created_at (str): ISO timestamp when the run was started
283
+ system_metrics (dict): the latest system metrics recorded for the run
284
+ summary (dict): A mutable dict-like property that holds the current summary.
285
+ Calling update will persist any changes.
286
+ project (str): the project associated with the run
287
+ entity (str): the name of the entity associated with the run
288
+ user (str): the name of the user who created the run
289
+ path (str): Unique identifier [entity]/[project]/[run_id]
290
+ notes (str): Notes about the run
291
+ read_only (boolean): Whether the run is editable
292
+ history_keys (str): Keys of the history metrics that have been logged
293
+ with `wandb.log({key: value})`
294
+ metadata (str): Metadata about the run from wandb-metadata.json
295
+ """
296
+
297
+ def __init__(
298
+ self,
299
+ client: "RetryingClient",
300
+ entity: str,
301
+ project: str,
302
+ run_id: str,
303
+ attrs: Optional[Mapping] = None,
304
+ include_sweeps: bool = True,
305
+ ):
306
+ """Initialize a Run object.
307
+
308
+ Run is always initialized by calling api.runs() where api is an instance of
309
+ wandb.Api.
310
+ """
311
+ _attrs = attrs or {}
312
+ super().__init__(dict(_attrs))
313
+ self.client = client
314
+ self._entity = entity
315
+ self.project = project
316
+ self._files = {}
317
+ self._base_dir = env.get_dir(tempfile.gettempdir())
318
+ self.id = run_id
319
+ self.sweep = None
320
+ self._include_sweeps = include_sweeps
321
+ self.dir = os.path.join(self._base_dir, *self.path)
322
+ try:
323
+ os.makedirs(self.dir)
324
+ except OSError:
325
+ pass
326
+ self._summary = None
327
+ self._metadata: Optional[Dict[str, Any]] = None
328
+ self._state = _attrs.get("state", "not found")
329
+
330
+ self.load(force=not _attrs)
331
+
332
+ @property
333
+ def state(self):
334
+ return self._state
335
+
336
+ @property
337
+ def entity(self):
338
+ return self._entity
339
+
340
+ @property
341
+ def username(self):
342
+ wandb.termwarn("Run.username is deprecated. Please use Run.entity instead.")
343
+ return self._entity
344
+
345
+ @property
346
+ def storage_id(self):
347
+ # For compatibility with wandb.Run, which has storage IDs
348
+ # in self.storage_id and names in self.id.
349
+
350
+ return self._attrs.get("id")
351
+
352
+ @property
353
+ def id(self):
354
+ return self._attrs.get("name")
355
+
356
+ @id.setter
357
+ def id(self, new_id):
358
+ attrs = self._attrs
359
+ attrs["name"] = new_id
360
+ return new_id
361
+
362
+ @property
363
+ def name(self):
364
+ return self._attrs.get("displayName")
365
+
366
+ @name.setter
367
+ def name(self, new_name):
368
+ self._attrs["displayName"] = new_name
369
+ return new_name
370
+
371
+ @classmethod
372
+ def create(cls, api, run_id=None, project=None, entity=None):
373
+ """Create a run for the given project."""
374
+ run_id = run_id or runid.generate_id()
375
+ project = project or api.settings.get("project") or "uncategorized"
376
+ mutation = gql(
377
+ """
378
+ mutation UpsertBucket($project: String, $entity: String, $name: String!) {
379
+ upsertBucket(input: {modelName: $project, entityName: $entity, name: $name}) {
380
+ bucket {
381
+ project {
382
+ name
383
+ entity { name }
384
+ }
385
+ id
386
+ name
387
+ }
388
+ inserted
389
+ }
390
+ }
391
+ """
392
+ )
393
+ variables = {"entity": entity, "project": project, "name": run_id}
394
+ res = api.client.execute(mutation, variable_values=variables)
395
+ res = res["upsertBucket"]["bucket"]
396
+ return Run(
397
+ api.client,
398
+ res["project"]["entity"]["name"],
399
+ res["project"]["name"],
400
+ res["name"],
401
+ {
402
+ "id": res["id"],
403
+ "config": "{}",
404
+ "systemMetrics": "{}",
405
+ "summaryMetrics": "{}",
406
+ "tags": [],
407
+ "description": None,
408
+ "notes": None,
409
+ "state": "running",
410
+ },
411
+ )
412
+
413
+ def load(self, force=False):
414
+ query = gql(
415
+ """
416
+ query Run($project: String!, $entity: String!, $name: String!) {{
417
+ project(name: $project, entityName: $entity) {{
418
+ run(name: $name) {{
419
+ ...RunFragment
420
+ }}
421
+ }}
422
+ }}
423
+ {}
424
+ """.format(RUN_FRAGMENT)
425
+ )
426
+ if force or not self._attrs:
427
+ response = self._exec(query)
428
+ if (
429
+ response is None
430
+ or response.get("project") is None
431
+ or response["project"].get("run") is None
432
+ ):
433
+ raise ValueError("Could not find run {}".format(self))
434
+ self._attrs = response["project"]["run"]
435
+ self._state = self._attrs["state"]
436
+
437
+ if self._include_sweeps and self.sweep_name and not self.sweep:
438
+ # There may be a lot of runs. Don't bother pulling them all
439
+ # just for the sake of this one.
440
+ self.sweep = public.Sweep.get(
441
+ self.client,
442
+ self.entity,
443
+ self.project,
444
+ self.sweep_name,
445
+ withRuns=False,
446
+ )
447
+
448
+ try:
449
+ self._attrs["summaryMetrics"] = (
450
+ json.loads(self._attrs["summaryMetrics"])
451
+ if self._attrs.get("summaryMetrics")
452
+ else {}
453
+ )
454
+ except json.decoder.JSONDecodeError:
455
+ # ignore invalid utf-8 or control characters
456
+ self._attrs["summaryMetrics"] = json.loads(
457
+ self._attrs["summaryMetrics"],
458
+ strict=False,
459
+ )
460
+ self._attrs["systemMetrics"] = (
461
+ json.loads(self._attrs["systemMetrics"])
462
+ if self._attrs.get("systemMetrics")
463
+ else {}
464
+ )
465
+ if self._attrs.get("user"):
466
+ self.user = public.User(self.client, self._attrs["user"])
467
+ config_user, config_raw = {}, {}
468
+ for key, value in json.loads(self._attrs.get("config") or "{}").items():
469
+ config = config_raw if key in WANDB_INTERNAL_KEYS else config_user
470
+ if isinstance(value, dict) and "value" in value:
471
+ config[key] = value["value"]
472
+ else:
473
+ config[key] = value
474
+ config_raw.update(config_user)
475
+ self._attrs["config"] = config_user
476
+ self._attrs["rawconfig"] = config_raw
477
+ return self._attrs
478
+
479
+ @normalize_exceptions
480
+ def wait_until_finished(self):
481
+ query = gql(
482
+ """
483
+ query RunState($project: String!, $entity: String!, $name: String!) {
484
+ project(name: $project, entityName: $entity) {
485
+ run(name: $name) {
486
+ state
487
+ }
488
+ }
489
+ }
490
+ """
491
+ )
492
+ while True:
493
+ res = self._exec(query)
494
+ state = res["project"]["run"]["state"]
495
+ if state in ["finished", "crashed", "failed"]:
496
+ print(f"Run finished with status: {state}")
497
+ self._attrs["state"] = state
498
+ self._state = state
499
+ return
500
+ time.sleep(5)
501
+
502
+ @normalize_exceptions
503
+ def update(self):
504
+ """Persist changes to the run object to the wandb backend."""
505
+ mutation = gql(
506
+ """
507
+ mutation UpsertBucket($id: String!, $description: String, $display_name: String, $notes: String, $tags: [String!], $config: JSONString!, $groupName: String) {{
508
+ upsertBucket(input: {{id: $id, description: $description, displayName: $display_name, notes: $notes, tags: $tags, config: $config, groupName: $groupName}}) {{
509
+ bucket {{
510
+ ...RunFragment
511
+ }}
512
+ }}
513
+ }}
514
+ {}
515
+ """.format(RUN_FRAGMENT)
516
+ )
517
+ _ = self._exec(
518
+ mutation,
519
+ id=self.storage_id,
520
+ tags=self.tags,
521
+ description=self.description,
522
+ notes=self.notes,
523
+ display_name=self.display_name,
524
+ config=self.json_config,
525
+ groupName=self.group,
526
+ )
527
+ self.summary.update()
528
+
529
+ @normalize_exceptions
530
+ def delete(self, delete_artifacts=False):
531
+ """Delete the given run from the wandb backend."""
532
+ mutation = gql(
533
+ """
534
+ mutation DeleteRun(
535
+ $id: ID!,
536
+ {}
537
+ ) {{
538
+ deleteRun(input: {{
539
+ id: $id,
540
+ {}
541
+ }}) {{
542
+ clientMutationId
543
+ }}
544
+ }}
545
+ """.format(
546
+ "$deleteArtifacts: Boolean" if delete_artifacts else "",
547
+ "deleteArtifacts: $deleteArtifacts" if delete_artifacts else "",
548
+ )
549
+ )
550
+
551
+ self.client.execute(
552
+ mutation,
553
+ variable_values={
554
+ "id": self.storage_id,
555
+ "deleteArtifacts": delete_artifacts,
556
+ },
557
+ )
558
+
559
+ def save(self):
560
+ self.update()
561
+
562
+ @property
563
+ def json_config(self):
564
+ config = {}
565
+ if "_wandb" in self.rawconfig:
566
+ config["_wandb"] = {"value": self.rawconfig["_wandb"], "desc": None}
567
+ for k, v in self.config.items():
568
+ config[k] = {"value": v, "desc": None}
569
+ return json.dumps(config)
570
+
571
+ def _exec(self, query, **kwargs):
572
+ """Execute a query against the cloud backend."""
573
+ variables = {"entity": self.entity, "project": self.project, "name": self.id}
574
+ variables.update(kwargs)
575
+ return self.client.execute(query, variable_values=variables)
576
+
577
+ def _sampled_history(self, keys, x_axis="_step", samples=500):
578
+ spec = {"keys": [x_axis] + keys, "samples": samples}
579
+ query = gql(
580
+ """
581
+ query RunSampledHistory($project: String!, $entity: String!, $name: String!, $specs: [JSONString!]!) {
582
+ project(name: $project, entityName: $entity) {
583
+ run(name: $name) { sampledHistory(specs: $specs) }
584
+ }
585
+ }
586
+ """
587
+ )
588
+
589
+ response = self._exec(query, specs=[json.dumps(spec)])
590
+ # sampledHistory returns one list per spec, we only send one spec
591
+ return response["project"]["run"]["sampledHistory"][0]
592
+
593
+ def _full_history(self, samples=500, stream="default"):
594
+ node = "history" if stream == "default" else "events"
595
+ query = gql(
596
+ """
597
+ query RunFullHistory($project: String!, $entity: String!, $name: String!, $samples: Int) {{
598
+ project(name: $project, entityName: $entity) {{
599
+ run(name: $name) {{ {}(samples: $samples) }}
600
+ }}
601
+ }}
602
+ """.format(node)
603
+ )
604
+
605
+ response = self._exec(query, samples=samples)
606
+ return [json.loads(line) for line in response["project"]["run"][node]]
607
+
608
+ @normalize_exceptions
609
+ def files(self, names=None, per_page=50):
610
+ """Return a file path for each file named.
611
+
612
+ Arguments:
613
+ names (list): names of the requested files, if empty returns all files
614
+ per_page (int): number of results per page.
615
+
616
+ Returns:
617
+ A `Files` object, which is an iterator over `File` objects.
618
+ """
619
+ return public.Files(self.client, self, names or [], per_page)
620
+
621
+ @normalize_exceptions
622
+ def file(self, name):
623
+ """Return the path of a file with a given name in the artifact.
624
+
625
+ Arguments:
626
+ name (str): name of requested file.
627
+
628
+ Returns:
629
+ A `File` matching the name argument.
630
+ """
631
+ return public.Files(self.client, self, [name])[0]
632
+
633
+ @normalize_exceptions
634
+ def upload_file(self, path, root="."):
635
+ """Upload a file.
636
+
637
+ Arguments:
638
+ path (str): name of file to upload.
639
+ root (str): the root path to save the file relative to. i.e.
640
+ If you want to have the file saved in the run as "my_dir/file.txt"
641
+ and you're currently in "my_dir" you would set root to "../".
642
+
643
+ Returns:
644
+ A `File` matching the name argument.
645
+ """
646
+ api = InternalApi(
647
+ default_settings={"entity": self.entity, "project": self.project},
648
+ retry_timedelta=RETRY_TIMEDELTA,
649
+ )
650
+ api.set_current_run_id(self.id)
651
+ root = os.path.abspath(root)
652
+ name = os.path.relpath(path, root)
653
+ with open(os.path.join(root, name), "rb") as f:
654
+ api.push({LogicalPath(name): f})
655
+ return public.Files(self.client, self, [name])[0]
656
+
657
+ @normalize_exceptions
658
+ def history(
659
+ self, samples=500, keys=None, x_axis="_step", pandas=True, stream="default"
660
+ ):
661
+ """Return sampled history metrics for a run.
662
+
663
+ This is simpler and faster if you are ok with the history records being sampled.
664
+
665
+ Arguments:
666
+ samples : (int, optional) The number of samples to return
667
+ pandas : (bool, optional) Return a pandas dataframe
668
+ keys : (list, optional) Only return metrics for specific keys
669
+ x_axis : (str, optional) Use this metric as the xAxis defaults to _step
670
+ stream : (str, optional) "default" for metrics, "system" for machine metrics
671
+
672
+ Returns:
673
+ pandas.DataFrame: If pandas=True returns a `pandas.DataFrame` of history
674
+ metrics.
675
+ list of dicts: If pandas=False returns a list of dicts of history metrics.
676
+ """
677
+ if keys is not None and not isinstance(keys, list):
678
+ wandb.termerror("keys must be specified in a list")
679
+ return []
680
+ if keys is not None and len(keys) > 0 and not isinstance(keys[0], str):
681
+ wandb.termerror("keys argument must be a list of strings")
682
+ return []
683
+
684
+ if keys and stream != "default":
685
+ wandb.termerror("stream must be default when specifying keys")
686
+ return []
687
+ elif keys:
688
+ lines = self._sampled_history(keys=keys, x_axis=x_axis, samples=samples)
689
+ else:
690
+ lines = self._full_history(samples=samples, stream=stream)
691
+ if pandas:
692
+ pd = util.get_module("pandas")
693
+ if pd:
694
+ lines = pd.DataFrame.from_records(lines)
695
+ else:
696
+ print("Unable to load pandas, call history with pandas=False")
697
+ return lines
698
+
699
+ @normalize_exceptions
700
+ def scan_history(self, keys=None, page_size=1000, min_step=None, max_step=None):
701
+ """Returns an iterable collection of all history records for a run.
702
+
703
+ Example:
704
+ Export all the loss values for an example run
705
+
706
+ ```python
707
+ run = api.run("l2k2/examples-numpy-boston/i0wt6xua")
708
+ history = run.scan_history(keys=["Loss"])
709
+ losses = [row["Loss"] for row in history]
710
+ ```
711
+
712
+ Arguments:
713
+ keys ([str], optional): only fetch these keys, and only fetch rows that have all of keys defined.
714
+ page_size (int, optional): size of pages to fetch from the api.
715
+ min_step (int, optional): the minimum number of pages to scan at a time.
716
+ max_step (int, optional): the maximum number of pages to scan at a time.
717
+
718
+ Returns:
719
+ An iterable collection over history records (dict).
720
+ """
721
+ if keys is not None and not isinstance(keys, list):
722
+ wandb.termerror("keys must be specified in a list")
723
+ return []
724
+ if keys is not None and len(keys) > 0 and not isinstance(keys[0], str):
725
+ wandb.termerror("keys argument must be a list of strings")
726
+ return []
727
+
728
+ last_step = self.lastHistoryStep
729
+ # set defaults for min/max step
730
+ if min_step is None:
731
+ min_step = 0
732
+ if max_step is None:
733
+ max_step = last_step + 1
734
+ # if the max step is past the actual last step, clamp it down
735
+ if max_step > last_step:
736
+ max_step = last_step + 1
737
+ if keys is None:
738
+ return public.HistoryScan(
739
+ run=self,
740
+ client=self.client,
741
+ page_size=page_size,
742
+ min_step=min_step,
743
+ max_step=max_step,
744
+ )
745
+ else:
746
+ return public.SampledHistoryScan(
747
+ run=self,
748
+ client=self.client,
749
+ keys=keys,
750
+ page_size=page_size,
751
+ min_step=min_step,
752
+ max_step=max_step,
753
+ )
754
+
755
+ @normalize_exceptions
756
+ def logged_artifacts(self, per_page=100):
757
+ return public.RunArtifacts(self.client, self, mode="logged", per_page=per_page)
758
+
759
+ @normalize_exceptions
760
+ def used_artifacts(self, per_page=100):
761
+ return public.RunArtifacts(self.client, self, mode="used", per_page=per_page)
762
+
763
+ @normalize_exceptions
764
+ def use_artifact(self, artifact, use_as=None):
765
+ """Declare an artifact as an input to a run.
766
+
767
+ Arguments:
768
+ artifact (`Artifact`): An artifact returned from
769
+ `wandb.Api().artifact(name)`
770
+ use_as (string, optional): A string identifying
771
+ how the artifact is used in the script. Used
772
+ to easily differentiate artifacts used in a
773
+ run, when using the beta wandb launch
774
+ feature's artifact swapping functionality.
775
+
776
+ Returns:
777
+ A `Artifact` object.
778
+ """
779
+ api = InternalApi(
780
+ default_settings={"entity": self.entity, "project": self.project},
781
+ retry_timedelta=RETRY_TIMEDELTA,
782
+ )
783
+ api.set_current_run_id(self.id)
784
+
785
+ if isinstance(artifact, wandb.Artifact) and not artifact.is_draft():
786
+ api.use_artifact(artifact.id, use_as=use_as or artifact.name)
787
+ return artifact
788
+ elif isinstance(artifact, wandb.Artifact) and artifact.is_draft():
789
+ raise ValueError(
790
+ "Only existing artifacts are accepted by this api. "
791
+ "Manually create one with `wandb artifact put`"
792
+ )
793
+ else:
794
+ raise ValueError("You must pass a wandb.Api().artifact() to use_artifact")
795
+
796
+ @normalize_exceptions
797
+ def log_artifact(
798
+ self,
799
+ artifact: "wandb.Artifact",
800
+ aliases: Optional[Collection[str]] = None,
801
+ tags: Optional[Collection[str]] = None,
802
+ ):
803
+ """Declare an artifact as output of a run.
804
+
805
+ Arguments:
806
+ artifact (`Artifact`): An artifact returned from
807
+ `wandb.Api().artifact(name)`.
808
+ aliases (list, optional): Aliases to apply to this artifact.
809
+ tags: (list, optional) Tags to apply to this artifact, if any.
810
+
811
+ Returns:
812
+ A `Artifact` object.
813
+ """
814
+ api = InternalApi(
815
+ default_settings={"entity": self.entity, "project": self.project},
816
+ retry_timedelta=RETRY_TIMEDELTA,
817
+ )
818
+ api.set_current_run_id(self.id)
819
+
820
+ if not isinstance(artifact, wandb.Artifact):
821
+ raise ValueError("You must pass a wandb.Api().artifact() to use_artifact")
822
+ if artifact.is_draft():
823
+ raise ValueError(
824
+ "Only existing artifacts are accepted by this api. "
825
+ "Manually create one with `wandb artifact put`"
826
+ )
827
+ if (
828
+ self.entity != artifact.source_entity
829
+ or self.project != artifact.source_project
830
+ ):
831
+ raise ValueError("A run can't log an artifact to a different project.")
832
+
833
+ artifact_collection_name = artifact.source_name.split(":")[0]
834
+ api.create_artifact(
835
+ artifact.type,
836
+ artifact_collection_name,
837
+ artifact.digest,
838
+ aliases=aliases,
839
+ tags=tags,
840
+ )
841
+ return artifact
842
+
843
+ @property
844
+ def summary(self):
845
+ if self._summary is None:
846
+ from wandb.old.summary import HTTPSummary
847
+
848
+ # TODO: fix the outdir issue
849
+ self._summary = HTTPSummary(self, self.client, summary=self.summary_metrics)
850
+ return self._summary
851
+
852
+ @property
853
+ def path(self):
854
+ return [
855
+ urllib.parse.quote_plus(str(self.entity)),
856
+ urllib.parse.quote_plus(str(self.project)),
857
+ urllib.parse.quote_plus(str(self.id)),
858
+ ]
859
+
860
+ @property
861
+ def url(self):
862
+ path = self.path
863
+ path.insert(2, "runs")
864
+ return self.client.app_url + "/".join(path)
865
+
866
+ @property
867
+ def metadata(self):
868
+ if self._metadata is None:
869
+ try:
870
+ f = self.file("wandb-metadata.json")
871
+ contents = util.download_file_into_memory(f.url, wandb.Api().api_key)
872
+ self._metadata = json_util.loads(contents)
873
+ except: # noqa: E722
874
+ # file doesn't exist, or can't be downloaded, or can't be parsed
875
+ pass
876
+ return self._metadata
877
+
878
+ @property
879
+ def lastHistoryStep(self): # noqa: N802
880
+ query = gql(
881
+ """
882
+ query RunHistoryKeys($project: String!, $entity: String!, $name: String!) {
883
+ project(name: $project, entityName: $entity) {
884
+ run(name: $name) { historyKeys }
885
+ }
886
+ }
887
+ """
888
+ )
889
+ response = self._exec(query)
890
+ if (
891
+ response is None
892
+ or response.get("project") is None
893
+ or response["project"].get("run") is None
894
+ or response["project"]["run"].get("historyKeys") is None
895
+ ):
896
+ return -1
897
+ history_keys = response["project"]["run"]["historyKeys"]
898
+ return history_keys["lastStep"] if "lastStep" in history_keys else -1
899
+
900
+ def to_html(self, height=420, hidden=False):
901
+ """Generate HTML containing an iframe displaying this run."""
902
+ url = self.url + "?jupyter=true"
903
+ style = f"border:none;width:100%;height:{height}px;"
904
+ prefix = ""
905
+ if hidden:
906
+ style += "display:none;"
907
+ prefix = ipython.toggle_button()
908
+ return prefix + f"<iframe src={url!r} style={style!r}></iframe>"
909
+
910
+ def _repr_html_(self) -> str:
911
+ return self.to_html()
912
+
913
+ def __repr__(self):
914
+ return "<Run {} ({})>".format("/".join(self.path), self.state)