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,1266 @@
1
+ """Defines wandb.init() and associated classes and methods.
2
+
3
+ `wandb.init()` indicates the beginning of a new run. In an ML training pipeline,
4
+ you could add `wandb.init()` to the beginning of your training script as well as
5
+ your evaluation script, and each step would be tracked as a run in W&B.
6
+
7
+ For more on using `wandb.init()`, including code snippets, check out our
8
+ [guide and FAQs](https://docs.wandb.ai/guides/track/launch).
9
+ """
10
+
11
+ import copy
12
+ import json
13
+ import logging
14
+ import os
15
+ import platform
16
+ import sys
17
+ import tempfile
18
+ import time
19
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Union
20
+
21
+ import wandb
22
+ import wandb.env
23
+ from wandb import trigger
24
+ from wandb.errors import CommError, Error, UsageError
25
+ from wandb.errors.util import ProtobufErrorHandler
26
+ from wandb.integration import sagemaker
27
+ from wandb.integration.magic import magic_install
28
+ from wandb.sdk.lib import runid
29
+ from wandb.sdk.lib.paths import StrPath
30
+ from wandb.util import _is_artifact_representation
31
+
32
+ from . import wandb_login, wandb_setup
33
+ from .backend.backend import Backend
34
+ from .lib import SummaryDisabled, filesystem, ipython, module, reporting, telemetry
35
+ from .lib.deprecate import Deprecated, deprecate
36
+ from .lib.mailbox import Mailbox, MailboxProgress
37
+ from .lib.printer import Printer, get_printer
38
+ from .lib.wburls import wburls
39
+ from .wandb_helper import parse_config
40
+ from .wandb_run import Run, TeardownHook, TeardownStage
41
+ from .wandb_settings import Settings, Source
42
+
43
+ if TYPE_CHECKING:
44
+ from wandb.proto import wandb_internal_pb2 as pb
45
+
46
+ logger: Optional[logging.Logger] = None # logger configured during wandb.init()
47
+
48
+
49
+ def _set_logger(log_object: logging.Logger) -> None:
50
+ """Configure module logger."""
51
+ global logger
52
+ logger = log_object
53
+
54
+
55
+ def _huggingface_version() -> Optional[str]:
56
+ if "transformers" in sys.modules:
57
+ trans = wandb.util.get_module("transformers")
58
+ if hasattr(trans, "__version__"):
59
+ return str(trans.__version__)
60
+ return None
61
+
62
+
63
+ def _maybe_mp_process(backend: Backend) -> bool:
64
+ parent_process = getattr(
65
+ backend._multiprocessing, "parent_process", None
66
+ ) # New in version 3.8.
67
+ if parent_process:
68
+ return parent_process() is not None
69
+ process = backend._multiprocessing.current_process()
70
+ if process.name == "MainProcess":
71
+ return False
72
+ if process.name.startswith("Process-"):
73
+ return True
74
+ return False
75
+
76
+
77
+ def _handle_launch_config(settings: "Settings") -> Dict[str, Any]:
78
+ launch_run_config: Dict[str, Any] = {}
79
+ if not settings.launch:
80
+ return launch_run_config
81
+ if os.environ.get("WANDB_CONFIG") is not None:
82
+ try:
83
+ launch_run_config = json.loads(os.environ.get("WANDB_CONFIG", "{}"))
84
+ except (ValueError, SyntaxError):
85
+ wandb.termwarn("Malformed WANDB_CONFIG, using original config")
86
+ elif settings.launch_config_path and os.path.exists(settings.launch_config_path):
87
+ with open(settings.launch_config_path) as fp:
88
+ launch_config = json.loads(fp.read())
89
+ launch_run_config = launch_config.get("overrides", {}).get("run_config")
90
+ else:
91
+ i = 0
92
+ chunks = []
93
+ while True:
94
+ key = f"WANDB_CONFIG_{i}"
95
+ if key in os.environ:
96
+ chunks.append(os.environ[key])
97
+ i += 1
98
+ else:
99
+ break
100
+ if len(chunks) > 0:
101
+ config_string = "".join(chunks)
102
+ try:
103
+ launch_run_config = json.loads(config_string)
104
+ except (ValueError, SyntaxError):
105
+ wandb.termwarn("Malformed WANDB_CONFIG, using original config")
106
+
107
+ return launch_run_config
108
+
109
+
110
+ class _WandbInit:
111
+ _init_telemetry_obj: telemetry.TelemetryRecord
112
+
113
+ def __init__(self) -> None:
114
+ self.kwargs = None
115
+ self.settings: Optional[Settings] = None
116
+ self.sweep_config: Dict[str, Any] = {}
117
+ self.launch_config: Dict[str, Any] = {}
118
+ self.config: Dict[str, Any] = {}
119
+ self.run: Optional[Run] = None
120
+ self.backend: Optional[Backend] = None
121
+
122
+ self._teardown_hooks: List[TeardownHook] = []
123
+ self._wl: Optional[wandb_setup._WandbSetup] = None
124
+ self._reporter: Optional[wandb.sdk.lib.reporting.Reporter] = None
125
+ self.notebook: Optional[wandb.jupyter.Notebook] = None # type: ignore
126
+ self.printer: Optional[Printer] = None
127
+
128
+ self._init_telemetry_obj = telemetry.TelemetryRecord()
129
+
130
+ self.deprecated_features_used: Dict[str, str] = dict()
131
+
132
+ def _setup_printer(self, settings: Settings) -> None:
133
+ if self.printer:
134
+ return
135
+ self.printer = get_printer(settings._jupyter)
136
+
137
+ def setup(self, kwargs: Any) -> None: # noqa: C901
138
+ """Complete setup for `wandb.init()`.
139
+
140
+ This includes parsing all arguments, applying them with settings and enabling logging.
141
+ """
142
+ self.kwargs = kwargs
143
+
144
+ # if the user ran, for example, `wandb.login(`) before `wandb.init()`,
145
+ # the singleton will already be set up and so if e.g. env vars are set
146
+ # in between, they will be ignored, which we need to inform the user about.
147
+ singleton = wandb_setup._WandbSetup._instance
148
+ if singleton is not None:
149
+ self._setup_printer(settings=singleton._settings)
150
+ assert self.printer
151
+ exclude_env_vars = {"WANDB_SERVICE", "WANDB_KUBEFLOW_URL"}
152
+ # check if environment variables have changed
153
+ singleton_env = {
154
+ k: v
155
+ for k, v in singleton._environ.items()
156
+ if k.startswith("WANDB_") and k not in exclude_env_vars
157
+ }
158
+ os_env = {
159
+ k: v
160
+ for k, v in os.environ.items()
161
+ if k.startswith("WANDB_") and k not in exclude_env_vars
162
+ }
163
+ if set(singleton_env.keys()) != set(os_env.keys()) or set(
164
+ singleton_env.values()
165
+ ) != set(os_env.values()):
166
+ line = (
167
+ "Changes to your `wandb` environment variables will be ignored "
168
+ "because your `wandb` session has already started. "
169
+ "For more information on how to modify your settings with "
170
+ "`wandb.init()` arguments, please refer to "
171
+ f"{self.printer.link(wburls.get('wandb_init'), 'the W&B docs')}."
172
+ )
173
+ self.printer.display(line, level="warn")
174
+
175
+ # we add this logic to be backward compatible with the old behavior of disable
176
+ # where it would disable the service if the mode was set to disabled
177
+ # TODO: use the regular settins object to handle this
178
+ mode = kwargs.get("mode")
179
+ settings_mode = (kwargs.get("settings") or {}).get("mode") or os.environ.get(
180
+ wandb.env.MODE
181
+ )
182
+ settings__disable_service = (kwargs.get("settings") or {}).get(
183
+ "_disable_service"
184
+ ) or os.environ.get(wandb.env._DISABLE_SERVICE)
185
+
186
+ setup_settings = {
187
+ "mode": mode or settings_mode,
188
+ "_disable_service": settings__disable_service,
189
+ }
190
+
191
+ self._wl = wandb_setup.setup(settings=setup_settings)
192
+ # Make sure we have a logger setup (might be an early logger)
193
+ assert self._wl is not None
194
+ _set_logger(self._wl._get_logger())
195
+
196
+ # Start with settings from wandb library singleton
197
+ settings: Settings = self._wl.settings.copy()
198
+
199
+ settings_param = kwargs.pop("settings", None)
200
+ if settings_param is not None and isinstance(settings_param, (Settings, dict)):
201
+ settings.update(settings_param, source=Source.INIT)
202
+
203
+ self._setup_printer(settings)
204
+ self._reporter = reporting.setup_reporter(settings=settings)
205
+
206
+ sagemaker_config: Dict = (
207
+ dict() if settings.sagemaker_disable else sagemaker.parse_sm_config()
208
+ )
209
+ if sagemaker_config:
210
+ sagemaker_api_key = sagemaker_config.get("wandb_api_key", None)
211
+ sagemaker_run, sagemaker_env = sagemaker.parse_sm_resources()
212
+ if sagemaker_env:
213
+ if sagemaker_api_key:
214
+ sagemaker_env["WANDB_API_KEY"] = sagemaker_api_key
215
+ settings._apply_env_vars(sagemaker_env)
216
+ wandb.setup(settings=settings)
217
+ settings.update(sagemaker_run, source=Source.SETUP)
218
+ with telemetry.context(obj=self._init_telemetry_obj) as tel:
219
+ tel.feature.sagemaker = True
220
+
221
+ with telemetry.context(obj=self._init_telemetry_obj) as tel:
222
+ if kwargs.get("config"):
223
+ tel.feature.set_init_config = True
224
+ if kwargs.get("name"):
225
+ tel.feature.set_init_name = True
226
+ if kwargs.get("id"):
227
+ tel.feature.set_init_id = True
228
+ if kwargs.get("tags"):
229
+ tel.feature.set_init_tags = True
230
+
231
+ # Remove parameters that are not part of settings
232
+ init_config = kwargs.pop("config", None) or dict()
233
+
234
+ # todo: remove this once officially deprecated
235
+ deprecated_kwargs = {
236
+ "config_include_keys": (
237
+ "Use `config=wandb.helper.parse_config(config_object, include=('key',))` instead."
238
+ ),
239
+ "config_exclude_keys": (
240
+ "Use `config=wandb.helper.parse_config(config_object, exclude=('key',))` instead."
241
+ ),
242
+ }
243
+ for deprecated_kwarg, msg in deprecated_kwargs.items():
244
+ if kwargs.get(deprecated_kwarg):
245
+ self.deprecated_features_used[deprecated_kwarg] = msg
246
+
247
+ init_config = parse_config(
248
+ init_config,
249
+ include=kwargs.pop("config_include_keys", None),
250
+ exclude=kwargs.pop("config_exclude_keys", None),
251
+ )
252
+
253
+ # merge config with sweep or sagemaker (or config file)
254
+ self.sweep_config = dict()
255
+ sweep_config = self._wl._sweep_config or dict()
256
+ self.config = dict()
257
+ self.init_artifact_config: Dict[str, Any] = dict()
258
+ for config_data in (
259
+ sagemaker_config,
260
+ self._wl._config,
261
+ init_config,
262
+ ):
263
+ if not config_data:
264
+ continue
265
+ # split out artifacts, since when inserted into
266
+ # config they will trigger use_artifact
267
+ # but the run is not yet upserted
268
+ self._split_artifacts_from_config(config_data, self.config)
269
+
270
+ if sweep_config:
271
+ self._split_artifacts_from_config(sweep_config, self.sweep_config)
272
+
273
+ monitor_gym = kwargs.pop("monitor_gym", None)
274
+ if monitor_gym and len(wandb.patched["gym"]) == 0:
275
+ wandb.gym.monitor() # type: ignore
276
+
277
+ if wandb.patched["tensorboard"]:
278
+ with telemetry.context(obj=self._init_telemetry_obj) as tel:
279
+ tel.feature.tensorboard_patch = True
280
+
281
+ tensorboard = kwargs.pop("tensorboard", None)
282
+ sync_tensorboard = kwargs.pop("sync_tensorboard", None)
283
+ if tensorboard or sync_tensorboard:
284
+ if len(wandb.patched["tensorboard"]) == 0:
285
+ wandb.tensorboard.patch() # type: ignore
286
+ with telemetry.context(obj=self._init_telemetry_obj) as tel:
287
+ tel.feature.tensorboard_sync = True
288
+
289
+ magic = kwargs.get("magic")
290
+ if magic not in (None, False):
291
+ magic_install(kwargs)
292
+
293
+ # handle login related parameters as these are applied to global state
294
+ init_settings = {
295
+ key: kwargs[key]
296
+ for key in ["anonymous", "force", "mode", "resume"]
297
+ if kwargs.get(key) is not None
298
+ }
299
+ if init_settings:
300
+ settings.update(init_settings, source=Source.INIT)
301
+
302
+ if not settings._offline and not settings._noop:
303
+ wandb_login._login(
304
+ anonymous=kwargs.pop("anonymous", None),
305
+ force=kwargs.pop("force", None),
306
+ _disable_warning=True,
307
+ _silent=settings.quiet or settings.silent,
308
+ _entity=kwargs.get("entity") or settings.entity,
309
+ )
310
+
311
+ # apply updated global state after login was handled
312
+ wl = wandb.setup()
313
+ assert wl is not None
314
+ settings._apply_settings(wl.settings)
315
+
316
+ # get status of code saving before applying user settings
317
+ save_code_pre_user_settings = settings.save_code
318
+
319
+ settings._apply_init(kwargs)
320
+ if not settings._offline and not settings._noop:
321
+ user_settings = self._wl._load_user_settings()
322
+ settings._apply_user(user_settings)
323
+
324
+ # ensure that user settings don't set saving to true
325
+ # if user explicitly set these to false in UI
326
+ if save_code_pre_user_settings is False:
327
+ settings.update({"save_code": False}, source=Source.INIT)
328
+
329
+ # TODO: remove this once we refactor the client. This is a temporary
330
+ # fix to make sure that we use the same project name for wandb-core.
331
+ # The reason this is not going throught the settings object is to
332
+ # avoid failure cases in other parts of the code that will be
333
+ # removed with the switch to wandb-core.
334
+ if settings.project is None:
335
+ project = wandb.util.auto_project_name(settings.program)
336
+ settings.update({"project": project}, source=Source.INIT)
337
+
338
+ # TODO(jhr): should this be moved? probably.
339
+ settings._set_run_start_time(source=Source.INIT)
340
+
341
+ if not settings._noop:
342
+ self._log_setup(settings)
343
+
344
+ if settings._jupyter:
345
+ self._jupyter_setup(settings)
346
+ launch_config = _handle_launch_config(settings)
347
+ if launch_config:
348
+ self._split_artifacts_from_config(launch_config, self.launch_config)
349
+
350
+ self.settings = settings
351
+
352
+ # self.settings.freeze()
353
+
354
+ def teardown(self) -> None:
355
+ # TODO: currently this is only called on failed wandb.init attempts
356
+ # normally this happens on the run object
357
+ assert logger
358
+ logger.info("tearing down wandb.init")
359
+ for hook in self._teardown_hooks:
360
+ hook.call()
361
+
362
+ def _split_artifacts_from_config(
363
+ self, config_source: dict, config_target: dict
364
+ ) -> None:
365
+ for k, v in config_source.items():
366
+ if _is_artifact_representation(v):
367
+ self.init_artifact_config[k] = v
368
+ else:
369
+ config_target.setdefault(k, v)
370
+
371
+ def _enable_logging(self, log_fname: str, run_id: Optional[str] = None) -> None:
372
+ """Enable logging to the global debug log.
373
+
374
+ This adds a run_id to the log, in case of multiple processes on the same machine.
375
+ Currently, there is no way to disable logging after it's enabled.
376
+ """
377
+ handler = logging.FileHandler(log_fname)
378
+ handler.setLevel(logging.INFO)
379
+
380
+ class WBFilter(logging.Filter):
381
+ def filter(self, record: logging.LogRecord) -> bool:
382
+ record.run_id = run_id
383
+ return True
384
+
385
+ if run_id:
386
+ formatter = logging.Formatter(
387
+ "%(asctime)s %(levelname)-7s %(threadName)-10s:%(process)d "
388
+ "[%(run_id)s:%(filename)s:%(funcName)s():%(lineno)s] %(message)s"
389
+ )
390
+ else:
391
+ formatter = logging.Formatter(
392
+ "%(asctime)s %(levelname)-7s %(threadName)-10s:%(process)d "
393
+ "[%(filename)s:%(funcName)s():%(lineno)s] %(message)s"
394
+ )
395
+
396
+ handler.setFormatter(formatter)
397
+ if run_id:
398
+ handler.addFilter(WBFilter())
399
+ assert logger is not None
400
+ logger.propagate = False
401
+ logger.addHandler(handler)
402
+ # TODO: make me configurable
403
+ logger.setLevel(logging.DEBUG)
404
+ self._teardown_hooks.append(
405
+ TeardownHook(
406
+ lambda: (handler.close(), logger.removeHandler(handler)), # type: ignore
407
+ TeardownStage.LATE,
408
+ )
409
+ )
410
+
411
+ def _safe_symlink(
412
+ self, base: str, target: str, name: str, delete: bool = False
413
+ ) -> None:
414
+ # TODO(jhr): do this with relpaths, but i cant figure it out on no sleep
415
+ if not hasattr(os, "symlink"):
416
+ return
417
+
418
+ pid = os.getpid()
419
+ tmp_name = os.path.join(base, "%s.%d" % (name, pid))
420
+
421
+ if delete:
422
+ try:
423
+ os.remove(os.path.join(base, name))
424
+ except OSError:
425
+ pass
426
+ target = os.path.relpath(target, base)
427
+ try:
428
+ os.symlink(target, tmp_name)
429
+ os.rename(tmp_name, os.path.join(base, name))
430
+ except OSError:
431
+ pass
432
+
433
+ def _pause_backend(self, *args: Any, **kwargs: Any) -> None: # noqa
434
+ if self.backend is None:
435
+ return None
436
+
437
+ # Attempt to save the code on every execution
438
+ if self.notebook.save_ipynb(): # type: ignore
439
+ assert self.run is not None
440
+ res = self.run.log_code(root=None)
441
+ logger.info("saved code: %s", res) # type: ignore
442
+ if self.backend.interface is not None:
443
+ logger.info("pausing backend") # type: ignore
444
+ self.backend.interface.publish_pause()
445
+
446
+ def _resume_backend(self, *args: Any, **kwargs: Any) -> None: # noqa
447
+ if self.backend is not None and self.backend.interface is not None:
448
+ logger.info("resuming backend") # type: ignore
449
+ self.backend.interface.publish_resume()
450
+
451
+ def _jupyter_teardown(self) -> None:
452
+ """Teardown hooks and display saving, called with wandb.finish."""
453
+ assert self.notebook
454
+ ipython = self.notebook.shell
455
+ self.notebook.save_history()
456
+ if self.notebook.save_ipynb():
457
+ assert self.run is not None
458
+ res = self.run.log_code(root=None)
459
+ logger.info("saved code and history: %s", res) # type: ignore
460
+ logger.info("cleaning up jupyter logic") # type: ignore
461
+ # because of how we bind our methods we manually find them to unregister
462
+ for hook in ipython.events.callbacks["pre_run_cell"]:
463
+ if "_resume_backend" in hook.__name__:
464
+ ipython.events.unregister("pre_run_cell", hook)
465
+ for hook in ipython.events.callbacks["post_run_cell"]:
466
+ if "_pause_backend" in hook.__name__:
467
+ ipython.events.unregister("post_run_cell", hook)
468
+ ipython.display_pub.publish = ipython.display_pub._orig_publish
469
+ del ipython.display_pub._orig_publish
470
+
471
+ def _jupyter_setup(self, settings: Settings) -> None:
472
+ """Add hooks, and session history saving."""
473
+ self.notebook = wandb.jupyter.Notebook(settings) # type: ignore
474
+ ipython = self.notebook.shell
475
+
476
+ # Monkey patch ipython publish to capture displayed outputs
477
+ if not hasattr(ipython.display_pub, "_orig_publish"):
478
+ logger.info("configuring jupyter hooks %s", self) # type: ignore
479
+ ipython.display_pub._orig_publish = ipython.display_pub.publish
480
+ # Registering resume and pause hooks
481
+
482
+ ipython.events.register("pre_run_cell", self._resume_backend)
483
+ ipython.events.register("post_run_cell", self._pause_backend)
484
+ self._teardown_hooks.append(
485
+ TeardownHook(self._jupyter_teardown, TeardownStage.EARLY)
486
+ )
487
+
488
+ def publish(data, metadata=None, **kwargs) -> None: # type: ignore
489
+ ipython.display_pub._orig_publish(data, metadata=metadata, **kwargs)
490
+ assert self.notebook is not None
491
+ self.notebook.save_display(
492
+ ipython.execution_count, {"data": data, "metadata": metadata}
493
+ )
494
+
495
+ ipython.display_pub.publish = publish
496
+
497
+ def _log_setup(self, settings: Settings) -> None:
498
+ """Set up logging from settings."""
499
+ filesystem.mkdir_exists_ok(os.path.dirname(settings.log_user))
500
+ filesystem.mkdir_exists_ok(os.path.dirname(settings.log_internal))
501
+ filesystem.mkdir_exists_ok(os.path.dirname(settings.sync_file))
502
+ filesystem.mkdir_exists_ok(settings.files_dir)
503
+ filesystem.mkdir_exists_ok(settings._tmp_code_dir)
504
+
505
+ if settings.symlink:
506
+ self._safe_symlink(
507
+ os.path.dirname(settings.sync_symlink_latest),
508
+ os.path.dirname(settings.sync_file),
509
+ os.path.basename(settings.sync_symlink_latest),
510
+ delete=True,
511
+ )
512
+ self._safe_symlink(
513
+ os.path.dirname(settings.log_symlink_user),
514
+ settings.log_user,
515
+ os.path.basename(settings.log_symlink_user),
516
+ delete=True,
517
+ )
518
+ self._safe_symlink(
519
+ os.path.dirname(settings.log_symlink_internal),
520
+ settings.log_internal,
521
+ os.path.basename(settings.log_symlink_internal),
522
+ delete=True,
523
+ )
524
+
525
+ _set_logger(logging.getLogger("wandb"))
526
+ self._enable_logging(settings.log_user)
527
+
528
+ assert self._wl
529
+ assert logger
530
+
531
+ self._wl._early_logger_flush(logger)
532
+ logger.info(f"Logging user logs to {settings.log_user}")
533
+ logger.info(f"Logging internal logs to {settings.log_internal}")
534
+
535
+ def _make_run_disabled(self) -> Run:
536
+ """Returns a Run-like object where all methods are no-ops.
537
+
538
+ This method is used when wandb.init(mode="disabled") is called or WANDB_MODE=disabled
539
+ is set. It creates a Run object that mimics the behavior of a normal Run but doesn't
540
+ communicate with the W&B servers.
541
+
542
+ The returned Run object has all expected attributes and methods, but they are
543
+ no-op versions that don't perform any actual logging or communication.
544
+ """
545
+ drun = Run(settings=Settings(mode="disabled", files_dir=tempfile.gettempdir()))
546
+ # config and summary objects
547
+ drun._config = wandb.sdk.wandb_config.Config()
548
+ drun._config.update(self.sweep_config)
549
+ drun._config.update(self.config)
550
+ drun.summary = SummaryDisabled() # type: ignore
551
+ # methods
552
+ drun.log = lambda data, *_, **__: drun.summary.update(data) # type: ignore
553
+ drun.finish = lambda *_, **__: module.unset_globals() # type: ignore
554
+ drun.join = drun.finish # type: ignore
555
+ drun.define_metric = lambda *_, **__: wandb.sdk.wandb_metric.Metric("dummy") # type: ignore
556
+ drun.save = lambda *_, **__: False # type: ignore
557
+ for symbol in (
558
+ "alert",
559
+ "finish_artifact",
560
+ "get_project_url",
561
+ "get_sweep_url",
562
+ "get_url",
563
+ "link_artifact",
564
+ "link_model",
565
+ "use_artifact",
566
+ "log_artifact",
567
+ "log_code",
568
+ "log_model",
569
+ "use_model",
570
+ "mark_preempting",
571
+ "plot_table",
572
+ "restore",
573
+ "status",
574
+ "watch",
575
+ "unwatch",
576
+ "upsert_artifact",
577
+ "_finish",
578
+ ):
579
+ setattr(drun, symbol, lambda *_, **__: None) # type: ignore
580
+ # attributes
581
+ drun._step = 0
582
+ drun._attach_id = None
583
+ drun._run_obj = None
584
+ drun._run_id = runid.generate_id()
585
+ drun._name = "dummy-" + drun.id
586
+ drun._project = "dummy"
587
+ drun._entity = "dummy"
588
+ drun._tags = tuple()
589
+ drun._notes = None
590
+ drun._group = None
591
+ drun._start_time = time.time()
592
+ drun._starting_step = 0
593
+ module.set_global(
594
+ run=drun,
595
+ config=drun.config,
596
+ log=drun.log,
597
+ summary=drun.summary,
598
+ save=drun.save,
599
+ use_artifact=drun.use_artifact,
600
+ log_artifact=drun.log_artifact,
601
+ define_metric=drun.define_metric,
602
+ plot_table=drun.plot_table,
603
+ alert=drun.alert,
604
+ )
605
+ return drun
606
+
607
+ def _on_progress_init(self, handle: MailboxProgress) -> None:
608
+ assert self.printer
609
+ line = "Waiting for wandb.init()...\r"
610
+ percent_done = handle.percent_done
611
+ self.printer.progress_update(line, percent_done=percent_done)
612
+
613
+ def init(self) -> Run: # noqa: C901
614
+ if logger is None:
615
+ raise RuntimeError("Logger not initialized")
616
+ logger.info("calling init triggers")
617
+ trigger.call("on_init", **self.kwargs) # type: ignore
618
+
619
+ assert self.settings is not None
620
+ assert self._wl is not None
621
+ assert self._reporter is not None
622
+
623
+ logger.info(
624
+ f"wandb.init called with sweep_config: {self.sweep_config}\nconfig: {self.config}"
625
+ )
626
+
627
+ if self.settings._noop:
628
+ return self._make_run_disabled()
629
+ if self.settings.reinit or (
630
+ self.settings._jupyter and self.settings.reinit is not False
631
+ ):
632
+ if len(self._wl._global_run_stack) > 0:
633
+ if len(self._wl._global_run_stack) > 1:
634
+ wandb.termwarn(
635
+ "If you want to track multiple runs concurrently in wandb, "
636
+ "you should use multi-processing not threads"
637
+ )
638
+
639
+ latest_run = self._wl._global_run_stack[-1]
640
+
641
+ logger.info(
642
+ f"re-initializing run, found existing run on stack: {latest_run._run_id}"
643
+ )
644
+
645
+ jupyter = self.settings._jupyter
646
+ if jupyter and not self.settings.silent:
647
+ ipython.display_html(
648
+ f"Finishing last run (ID:{latest_run._run_id}) before initializing another..."
649
+ )
650
+
651
+ latest_run.finish()
652
+
653
+ if jupyter and not self.settings.silent:
654
+ ipython.display_html(
655
+ f"Successfully finished last run (ID:{latest_run._run_id}). Initializing new run:<br/>"
656
+ )
657
+ elif isinstance(wandb.run, Run):
658
+ service = self._wl.service
659
+ # We shouldn't return a stale global run if we are in a new pid
660
+ if not service or os.getpid() == wandb.run._init_pid:
661
+ logger.info("wandb.init() called when a run is still active")
662
+ with telemetry.context() as tel:
663
+ tel.feature.init_return_run = True
664
+ return wandb.run
665
+
666
+ logger.info("starting backend")
667
+
668
+ service = self._wl.service
669
+ if service:
670
+ logger.info("sending inform_init request")
671
+ service.inform_init(
672
+ settings=self.settings.to_proto(),
673
+ run_id=self.settings.run_id,
674
+ )
675
+
676
+ mailbox = Mailbox()
677
+ backend = Backend(
678
+ settings=self.settings,
679
+ service=service,
680
+ mailbox=mailbox,
681
+ )
682
+ backend.ensure_launched()
683
+ logger.info("backend started and connected")
684
+ # Make sure we are logged in
685
+ # wandb_login._login(_backend=backend, _settings=self.settings)
686
+
687
+ # resuming needs access to the server, check server_status()?
688
+ run = Run(
689
+ config=self.config,
690
+ settings=self.settings,
691
+ sweep_config=self.sweep_config,
692
+ launch_config=self.launch_config,
693
+ )
694
+
695
+ # Populate initial telemetry
696
+ with telemetry.context(run=run, obj=self._init_telemetry_obj) as tel:
697
+ tel.cli_version = wandb.__version__
698
+ tel.python_version = platform.python_version()
699
+ tel.platform = f"{platform.system()}-{platform.machine()}".lower()
700
+ hf_version = _huggingface_version()
701
+ if hf_version:
702
+ tel.huggingface_version = hf_version
703
+ if self.settings._jupyter:
704
+ tel.env.jupyter = True
705
+ if self.settings._ipython:
706
+ tel.env.ipython = True
707
+ if self.settings._colab:
708
+ tel.env.colab = True
709
+ if self.settings._kaggle:
710
+ tel.env.kaggle = True
711
+ if self.settings._windows:
712
+ tel.env.windows = True
713
+
714
+ if self.settings.launch:
715
+ tel.feature.launch = True
716
+
717
+ for module_name in telemetry.list_telemetry_imports(only_imported=True):
718
+ setattr(tel.imports_init, module_name, True)
719
+
720
+ # probe the active start method
721
+ active_start_method: Optional[str] = None
722
+ if self.settings.start_method == "thread":
723
+ active_start_method = self.settings.start_method
724
+ else:
725
+ active_start_method = getattr(
726
+ backend._multiprocessing, "get_start_method", lambda: None
727
+ )()
728
+
729
+ if active_start_method == "spawn":
730
+ tel.env.start_spawn = True
731
+ elif active_start_method == "fork":
732
+ tel.env.start_fork = True
733
+ elif active_start_method == "forkserver":
734
+ tel.env.start_forkserver = True
735
+ elif active_start_method == "thread":
736
+ tel.env.start_thread = True
737
+
738
+ if os.environ.get("PEX"):
739
+ tel.env.pex = True
740
+
741
+ if self.settings._aws_lambda:
742
+ tel.env.aws_lambda = True
743
+
744
+ if os.environ.get(wandb.env._DISABLE_SERVICE):
745
+ tel.feature.service_disabled = True
746
+
747
+ if service:
748
+ tel.feature.service = True
749
+ if self.settings._flow_control_disabled:
750
+ tel.feature.flow_control_disabled = True
751
+ if self.settings._flow_control_custom:
752
+ tel.feature.flow_control_custom = True
753
+ if not self.settings._require_legacy_service:
754
+ tel.feature.core = True
755
+ if self.settings._shared:
756
+ wandb.termwarn(
757
+ "The `_shared` feature is experimental and may change. "
758
+ "Please contact support@wandb.com for guidance and to report any issues."
759
+ )
760
+ tel.feature.shared_mode = True
761
+
762
+ tel.env.maybe_mp = _maybe_mp_process(backend)
763
+
764
+ if not self.settings.label_disable:
765
+ if self.notebook:
766
+ run._label_probe_notebook(self.notebook)
767
+ else:
768
+ run._label_probe_main()
769
+
770
+ for deprecated_feature, msg in self.deprecated_features_used.items():
771
+ warning_message = f"`{deprecated_feature}` is deprecated. {msg}"
772
+ deprecate(
773
+ field_name=getattr(Deprecated, "init__" + deprecated_feature),
774
+ warning_message=warning_message,
775
+ run=run,
776
+ )
777
+
778
+ logger.info("updated telemetry")
779
+
780
+ run._set_library(self._wl)
781
+ run._set_backend(backend)
782
+ run._set_reporter(self._reporter)
783
+ run._set_teardown_hooks(self._teardown_hooks)
784
+
785
+ backend._hack_set_run(run)
786
+ assert backend.interface
787
+ mailbox.enable_keepalive()
788
+ backend.interface.publish_header()
789
+
790
+ # Using GitRepo() blocks & can be slow, depending on user's current git setup.
791
+ # We don't want to block run initialization/start request, so populate run's git
792
+ # info beforehand.
793
+ if not self.settings.disable_git:
794
+ run._populate_git_info()
795
+
796
+ run_result: Optional[pb.RunUpdateResult] = None
797
+
798
+ if self.settings._offline:
799
+ with telemetry.context(run=run) as tel:
800
+ tel.feature.offline = True
801
+
802
+ if self.settings.resume:
803
+ wandb.termwarn(
804
+ "`resume` will be ignored since W&B syncing is set to `offline`. "
805
+ f"Starting a new run with run id {run.id}."
806
+ )
807
+ error: Optional[wandb.errors.Error] = None
808
+
809
+ timeout = self.settings.init_timeout
810
+
811
+ logger.info(f"communicating run to backend with {timeout} second timeout")
812
+
813
+ run_init_handle = backend.interface.deliver_run(run)
814
+ result = run_init_handle.wait(
815
+ timeout=timeout,
816
+ on_progress=self._on_progress_init,
817
+ cancel=True,
818
+ )
819
+ if result:
820
+ run_result = result.run_result
821
+
822
+ if run_result is None:
823
+ error_message = (
824
+ f"Run initialization has timed out after {timeout} sec. "
825
+ f"\nPlease refer to the documentation for additional information: {wburls.get('doc_start_err')}"
826
+ )
827
+ # We're not certain whether the error we encountered is due to an issue
828
+ # with the server (a "CommError") or if it's a problem within the SDK (an "Error").
829
+ # This means that the error could be a result of the server being unresponsive,
830
+ # or it could be because we were unable to communicate with the wandb service.
831
+ error = CommError(error_message)
832
+ run_init_handle._cancel()
833
+ elif run_result.HasField("error"):
834
+ error = ProtobufErrorHandler.to_exception(run_result.error)
835
+
836
+ if error is not None:
837
+ logger.error(f"encountered error: {error}")
838
+ if not service:
839
+ # Shutdown the backend and get rid of the logger
840
+ # we don't need to do console cleanup at this point
841
+ backend.cleanup()
842
+ self.teardown()
843
+ raise error
844
+
845
+ assert run_result is not None # for mypy
846
+
847
+ if not run_result.HasField("run"):
848
+ raise Error(
849
+ "It appears that something have gone wrong during the program execution as an unexpected missing field was encountered. "
850
+ "(run_result is missing the 'run' field)"
851
+ )
852
+
853
+ if run_result.run.resumed:
854
+ logger.info("run resumed")
855
+ with telemetry.context(run=run) as tel:
856
+ tel.feature.resumed = run_result.run.resumed
857
+
858
+ run._set_run_obj(run_result.run)
859
+
860
+ run._on_init()
861
+
862
+ logger.info("starting run threads in backend")
863
+ # initiate run (stats and metadata probing)
864
+
865
+ if service:
866
+ service.inform_start(
867
+ settings=self.settings.to_proto(),
868
+ run_id=self.settings.run_id,
869
+ )
870
+
871
+ assert backend.interface
872
+ assert run._run_obj
873
+
874
+ run_start_handle = backend.interface.deliver_run_start(run._run_obj)
875
+ # TODO: add progress to let user know we are doing something
876
+ run_start_result = run_start_handle.wait(timeout=30)
877
+ if run_start_result is None:
878
+ run_start_handle.abandon()
879
+
880
+ assert self._wl is not None
881
+ self._wl._global_run_stack.append(run)
882
+ self.run = run
883
+
884
+ run._handle_launch_artifact_overrides()
885
+ if (
886
+ self.settings.launch
887
+ and self.settings.launch_config_path
888
+ and os.path.exists(self.settings.launch_config_path)
889
+ ):
890
+ run.save(self.settings.launch_config_path)
891
+ # put artifacts in run config here
892
+ # since doing so earlier will cause an error
893
+ # as the run is not upserted
894
+ for k, v in self.init_artifact_config.items():
895
+ run.config.update({k: v}, allow_val_change=True)
896
+ job_artifact = run._launch_artifact_mapping.get(
897
+ wandb.util.LAUNCH_JOB_ARTIFACT_SLOT_NAME
898
+ )
899
+ if job_artifact:
900
+ run.use_artifact(job_artifact)
901
+
902
+ self.backend = backend
903
+ assert self._reporter
904
+ self._reporter.set_context(run=run)
905
+ run._on_start()
906
+ logger.info("run started, returning control to user process")
907
+ return run
908
+
909
+
910
+ def _attach(
911
+ attach_id: Optional[str] = None,
912
+ run_id: Optional[str] = None,
913
+ *,
914
+ run: Optional["Run"] = None,
915
+ ) -> Optional[Run]:
916
+ """Attach to a run currently executing in another process/thread.
917
+
918
+ Arguments:
919
+ attach_id: (str, optional) The id of the run or an attach identifier
920
+ that maps to a run.
921
+ run_id: (str, optional) The id of the run to attach to.
922
+ run: (Run, optional) The run instance to attach
923
+ """
924
+ attach_id = attach_id or run_id
925
+ if not ((attach_id is None) ^ (run is None)):
926
+ raise UsageError("Either (`attach_id` or `run_id`) or `run` must be specified")
927
+
928
+ attach_id = attach_id or (run._attach_id if run else None)
929
+
930
+ if attach_id is None:
931
+ raise UsageError(
932
+ "Either `attach_id` or `run_id` must be specified or `run` must have `_attach_id`"
933
+ )
934
+ wandb._assert_is_user_process() # type: ignore
935
+
936
+ _wl = wandb_setup._setup()
937
+ assert _wl
938
+
939
+ _set_logger(_wl._get_logger())
940
+ if logger is None:
941
+ raise UsageError("logger is not initialized")
942
+
943
+ service = _wl.service
944
+ if not service:
945
+ raise UsageError(f"Unable to attach to run {attach_id} (no service process)")
946
+
947
+ try:
948
+ attach_settings = service.inform_attach(attach_id=attach_id)
949
+ except Exception as e:
950
+ raise UsageError(f"Unable to attach to run {attach_id}") from e
951
+
952
+ settings: Settings = copy.copy(_wl._settings)
953
+
954
+ settings.update(
955
+ {
956
+ "run_id": attach_id,
957
+ "_start_time": attach_settings._start_time.value,
958
+ "_start_datetime": attach_settings._start_datetime.value,
959
+ "_offline": attach_settings._offline.value,
960
+ },
961
+ source=Source.INIT,
962
+ )
963
+
964
+ # TODO: consolidate this codepath with wandb.init()
965
+ mailbox = Mailbox()
966
+ backend = Backend(settings=settings, service=service, mailbox=mailbox)
967
+ backend.ensure_launched()
968
+ logger.info("attach backend started and connected")
969
+
970
+ if run is None:
971
+ run = Run(settings=settings)
972
+ else:
973
+ run._init(settings=settings)
974
+ run._set_library(_wl)
975
+ run._set_backend(backend)
976
+ backend._hack_set_run(run)
977
+ assert backend.interface
978
+
979
+ mailbox.enable_keepalive()
980
+
981
+ attach_handle = backend.interface.deliver_attach(attach_id)
982
+ # TODO: add progress to let user know we are doing something
983
+ attach_result = attach_handle.wait(timeout=30)
984
+ if not attach_result:
985
+ attach_handle.abandon()
986
+ raise UsageError("Timeout attaching to run")
987
+ attach_response = attach_result.response.attach_response
988
+ if attach_response.error and attach_response.error.message:
989
+ raise UsageError(f"Failed to attach to run: {attach_response.error.message}")
990
+
991
+ run._set_run_obj(attach_response.run)
992
+ run._on_attach()
993
+ return run
994
+
995
+
996
+ def init(
997
+ job_type: Optional[str] = None,
998
+ dir: Optional[StrPath] = None,
999
+ config: Union[Dict, str, None] = None,
1000
+ project: Optional[str] = None,
1001
+ entity: Optional[str] = None,
1002
+ reinit: Optional[bool] = None,
1003
+ tags: Optional[Sequence] = None,
1004
+ group: Optional[str] = None,
1005
+ name: Optional[str] = None,
1006
+ notes: Optional[str] = None,
1007
+ magic: Optional[Union[dict, str, bool]] = None,
1008
+ config_exclude_keys: Optional[List[str]] = None,
1009
+ config_include_keys: Optional[List[str]] = None,
1010
+ anonymous: Optional[str] = None,
1011
+ mode: Optional[str] = None,
1012
+ allow_val_change: Optional[bool] = None,
1013
+ resume: Optional[Union[bool, str]] = None,
1014
+ force: Optional[bool] = None,
1015
+ tensorboard: Optional[bool] = None, # alias for sync_tensorboard
1016
+ sync_tensorboard: Optional[bool] = None,
1017
+ monitor_gym: Optional[bool] = None,
1018
+ save_code: Optional[bool] = None,
1019
+ id: Optional[str] = None,
1020
+ fork_from: Optional[str] = None,
1021
+ resume_from: Optional[str] = None,
1022
+ settings: Union[Settings, Dict[str, Any], None] = None,
1023
+ ) -> Run:
1024
+ r"""Start a new run to track and log to W&B.
1025
+
1026
+ In an ML training pipeline, you could add `wandb.init()`
1027
+ to the beginning of your training script as well as your evaluation
1028
+ script, and each piece would be tracked as a run in W&B.
1029
+
1030
+ `wandb.init()` spawns a new background process to log data to a run, and it
1031
+ also syncs data to wandb.ai by default, so you can see live visualizations.
1032
+
1033
+ Call `wandb.init()` to start a run before logging data with `wandb.log()`:
1034
+ <!--yeadoc-test:init-method-log-->
1035
+ ```python
1036
+ import wandb
1037
+
1038
+ wandb.init()
1039
+ # ... calculate metrics, generate media
1040
+ wandb.log({"accuracy": 0.9})
1041
+ ```
1042
+
1043
+ `wandb.init()` returns a run object, and you can also access the run object
1044
+ via `wandb.run`:
1045
+ <!--yeadoc-test:init-and-assert-global-->
1046
+ ```python
1047
+ import wandb
1048
+
1049
+ run = wandb.init()
1050
+
1051
+ assert run is wandb.run
1052
+ ```
1053
+
1054
+ At the end of your script, we will automatically call `wandb.finish` to
1055
+ finalize and cleanup the run. However, if you call `wandb.init` from a
1056
+ child process, you must explicitly call `wandb.finish` at the end of the
1057
+ child process.
1058
+
1059
+ For more on using `wandb.init()`, including detailed examples, check out our
1060
+ [guide and FAQs](https://docs.wandb.ai/guides/track/launch).
1061
+
1062
+ Arguments:
1063
+ project: (str, optional) The name of the project where you're sending
1064
+ the new run. If the project is not specified, we will try to infer
1065
+ the project name from git root or the current program file. If we
1066
+ can't infer the project name, we will default to `"uncategorized"`.
1067
+ entity: (str, optional) An entity is a username or team name where
1068
+ you're sending runs. This entity must exist before you can send runs
1069
+ there, so make sure to create your account or team in the UI before
1070
+ starting to log runs.
1071
+ If you don't specify an entity, the run will be sent to your default
1072
+ entity. Change your default entity
1073
+ in [your settings](https://wandb.ai/settings) under "default location
1074
+ to create new projects".
1075
+ config: (dict, argparse, absl.flags, str, optional)
1076
+ This sets `wandb.config`, a dictionary-like object for saving inputs
1077
+ to your job, like hyperparameters for a model or settings for a data
1078
+ preprocessing job. The config will show up in a table in the UI that
1079
+ you can use to group, filter, and sort runs. Keys should not contain
1080
+ `.` in their names, and values should be under 10 MB.
1081
+ If dict, argparse or absl.flags: will load the key value pairs into
1082
+ the `wandb.config` object.
1083
+ If str: will look for a yaml file by that name, and load config from
1084
+ that file into the `wandb.config` object.
1085
+ save_code: (bool, optional) Turn this on to save the main script or
1086
+ notebook to W&B. This is valuable for improving experiment
1087
+ reproducibility and to diff code across experiments in the UI. By
1088
+ default this is off, but you can flip the default behavior to on
1089
+ in [your settings page](https://wandb.ai/settings).
1090
+ group: (str, optional) Specify a group to organize individual runs into
1091
+ a larger experiment. For example, you might be doing cross
1092
+ validation, or you might have multiple jobs that train and evaluate
1093
+ a model against different test sets. Group gives you a way to
1094
+ organize runs together into a larger whole, and you can toggle this
1095
+ on and off in the UI. For more details, see our
1096
+ [guide to grouping runs](https://docs.wandb.com/guides/runs/grouping).
1097
+ job_type: (str, optional) Specify the type of run, which is useful when
1098
+ you're grouping runs together into larger experiments using group.
1099
+ For example, you might have multiple jobs in a group, with job types
1100
+ like train and eval. Setting this makes it easy to filter and group
1101
+ similar runs together in the UI so you can compare apples to apples.
1102
+ tags: (list, optional) A list of strings, which will populate the list
1103
+ of tags on this run in the UI. Tags are useful for organizing runs
1104
+ together, or applying temporary labels like "baseline" or
1105
+ "production". It's easy to add and remove tags in the UI, or filter
1106
+ down to just runs with a specific tag.
1107
+ If you are resuming a run, its tags will be overwritten by the tags
1108
+ you pass to `wandb.init()`. If you want to add tags to a resumed run
1109
+ without overwriting its existing tags, use `run.tags += ["new_tag"]`
1110
+ after `wandb.init()`.
1111
+ name: (str, optional) A short display name for this run, which is how
1112
+ you'll identify this run in the UI. By default, we generate a random
1113
+ two-word name that lets you easily cross-reference runs from the
1114
+ table to charts. Keeping these run names short makes the chart
1115
+ legends and tables easier to read. If you're looking for a place to
1116
+ save your hyperparameters, we recommend saving those in config.
1117
+ notes: (str, optional) A longer description of the run, like a `-m` commit
1118
+ message in git. This helps you remember what you were doing when you
1119
+ ran this run.
1120
+ dir: (str or pathlib.Path, optional) An absolute path to a directory where
1121
+ metadata will be stored. When you call `download()` on an artifact,
1122
+ this is the directory where downloaded files will be saved. By default,
1123
+ this is the `./wandb` directory.
1124
+ resume: (bool, str, optional) Sets the resuming behavior. Options:
1125
+ `"allow"`, `"must"`, `"never"`, `"auto"` or `None`. Defaults to `None`.
1126
+ Cases:
1127
+ - `None` (default): If the new run has the same ID as a previous run,
1128
+ this run overwrites that data.
1129
+ - `"auto"` (or `True`): if the previous run on this machine crashed,
1130
+ automatically resume it. Otherwise, start a new run.
1131
+ - `"allow"`: if id is set with `init(id="UNIQUE_ID")` or
1132
+ `WANDB_RUN_ID="UNIQUE_ID"` and it is identical to a previous run,
1133
+ wandb will automatically resume the run with that id. Otherwise,
1134
+ wandb will start a new run.
1135
+ - `"never"`: if id is set with `init(id="UNIQUE_ID")` or
1136
+ `WANDB_RUN_ID="UNIQUE_ID"` and it is identical to a previous run,
1137
+ wandb will crash.
1138
+ - `"must"`: if id is set with `init(id="UNIQUE_ID")` or
1139
+ `WANDB_RUN_ID="UNIQUE_ID"` and it is identical to a previous run,
1140
+ wandb will automatically resume the run with the id. Otherwise,
1141
+ wandb will crash.
1142
+ See [our guide to resuming runs](https://docs.wandb.com/guides/runs/resuming)
1143
+ for more.
1144
+ reinit: (bool, optional) Allow multiple `wandb.init()` calls in the same
1145
+ process. (default: `False`)
1146
+ magic: (bool, dict, or str, optional) The bool controls whether we try to
1147
+ auto-instrument your script, capturing basic details of your run
1148
+ without you having to add more wandb code. (default: `False`)
1149
+ You can also pass a dict, json string, or yaml filename.
1150
+ config_exclude_keys: (list, optional) string keys to exclude from
1151
+ `wandb.config`.
1152
+ config_include_keys: (list, optional) string keys to include in
1153
+ `wandb.config`.
1154
+ anonymous: (str, optional) Controls anonymous data logging. Options:
1155
+ - `"never"` (default): requires you to link your W&B account before
1156
+ tracking the run, so you don't accidentally create an anonymous
1157
+ run.
1158
+ - `"allow"`: lets a logged-in user track runs with their account, but
1159
+ lets someone who is running the script without a W&B account see
1160
+ the charts in the UI.
1161
+ - `"must"`: sends the run to an anonymous account instead of to a
1162
+ signed-up user account.
1163
+ mode: (str, optional) Can be `"online"`, `"offline"` or `"disabled"`. Defaults to
1164
+ online.
1165
+ allow_val_change: (bool, optional) Whether to allow config values to
1166
+ change after setting the keys once. By default, we throw an exception
1167
+ if a config value is overwritten. If you want to track something
1168
+ like a varying learning rate at multiple times during training, use
1169
+ `wandb.log()` instead. (default: `False` in scripts, `True` in Jupyter)
1170
+ force: (bool, optional) If `True`, this crashes the script if a user isn't
1171
+ logged in to W&B. If `False`, this will let the script run in offline
1172
+ mode if a user isn't logged in to W&B. (default: `False`)
1173
+ sync_tensorboard: (bool, optional) Synchronize wandb logs from tensorboard or
1174
+ tensorboardX and save the relevant events file. (default: `False`)
1175
+ tensorboard: (bool, optional) Alias for `sync_tensorboard`, deprecated.
1176
+ monitor_gym: (bool, optional) Automatically log videos of environment when
1177
+ using OpenAI Gym. (default: `False`)
1178
+ See [our guide to this integration](https://docs.wandb.com/guides/integrations/openai-gym).
1179
+ id: (str, optional) A unique ID for this run, used for resuming. It must
1180
+ be unique in the project, and if you delete a run you can't reuse
1181
+ the ID. Use the `name` field for a short descriptive name, or `config`
1182
+ for saving hyperparameters to compare across runs. The ID cannot
1183
+ contain the following special characters: `/\#?%:`.
1184
+ See [our guide to resuming runs](https://docs.wandb.com/guides/runs/resuming).
1185
+ fork_from: (str, optional) A string with the format {run_id}?_step={step} describing
1186
+ a moment in a previous run to fork a new run from. Creates a new run that picks up
1187
+ logging history from the specified run at the specified moment. The target run must
1188
+ be in the current project. Example: `fork_from="my-run-id?_step=1234"`.
1189
+ resume_from: (str, optional) A string with the format {run_id}?_step={step} describing
1190
+ a moment in a previous run to resume a run from. This allows users to truncate
1191
+ the history logged to a run at an intermediate step and resume logging from that step.
1192
+ It uses run forking under the hood. The target run must be in the
1193
+ current project. Example: `resume_from="my-run-id?_step=1234"`.
1194
+ settings: (dict, wandb.Settings, optional) Settings to use for this run. (default: None)
1195
+
1196
+ Examples:
1197
+ ### Set where the run is logged
1198
+
1199
+ You can change where the run is logged, just like changing
1200
+ the organization, repository, and branch in git:
1201
+ ```python
1202
+ import wandb
1203
+
1204
+ user = "geoff"
1205
+ project = "capsules"
1206
+ display_name = "experiment-2021-10-31"
1207
+
1208
+ wandb.init(entity=user, project=project, name=display_name)
1209
+ ```
1210
+
1211
+ ### Add metadata about the run to the config
1212
+
1213
+ Pass a dictionary-style object as the `config` keyword argument to add
1214
+ metadata, like hyperparameters, to your run.
1215
+ <!--yeadoc-test:init-set-config-->
1216
+ ```python
1217
+ import wandb
1218
+
1219
+ config = {"lr": 3e-4, "batch_size": 32}
1220
+ config.update({"architecture": "resnet", "depth": 34})
1221
+ wandb.init(config=config)
1222
+ ```
1223
+
1224
+ Raises:
1225
+ Error: if some unknown or internal error happened during the run initialization.
1226
+ AuthenticationError: if the user failed to provide valid credentials.
1227
+ CommError: if there was a problem communicating with the WandB server.
1228
+ UsageError: if the user provided invalid arguments.
1229
+ KeyboardInterrupt: if user interrupts the run.
1230
+
1231
+ Returns:
1232
+ A `Run` object.
1233
+ """
1234
+ wandb._assert_is_user_process() # type: ignore
1235
+
1236
+ kwargs = dict(locals())
1237
+
1238
+ num_resume_options_set = (
1239
+ (fork_from is not None) # wrap
1240
+ + (resume is not None)
1241
+ + (resume_from is not None)
1242
+ )
1243
+ if num_resume_options_set > 1:
1244
+ raise ValueError(
1245
+ "You cannot specify more than one of `fork_from`, `resume`, or `resume_from`"
1246
+ )
1247
+
1248
+ try:
1249
+ wi = _WandbInit()
1250
+ wi.setup(kwargs)
1251
+ return wi.init()
1252
+
1253
+ except KeyboardInterrupt as e:
1254
+ if logger is not None:
1255
+ logger.warning("interrupted", exc_info=e)
1256
+
1257
+ raise
1258
+
1259
+ except Exception as e:
1260
+ if logger is not None:
1261
+ logger.exception("error in wandb.init()", exc_info=e)
1262
+
1263
+ # Need to build delay into this sentry capture because our exit hooks
1264
+ # mess with sentry's ability to send out errors before the program ends.
1265
+ wandb._sentry.reraise(e)
1266
+ raise AssertionError() # unreachable