wandb 0.13.10__py3-none-any.whl → 0.14.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. wandb/__init__.py +2 -3
  2. wandb/apis/__init__.py +1 -3
  3. wandb/apis/importers/__init__.py +4 -0
  4. wandb/apis/importers/base.py +312 -0
  5. wandb/apis/importers/mlflow.py +113 -0
  6. wandb/apis/internal.py +29 -2
  7. wandb/apis/normalize.py +6 -5
  8. wandb/apis/public.py +163 -180
  9. wandb/apis/reports/_templates.py +6 -12
  10. wandb/apis/reports/report.py +1 -1
  11. wandb/apis/reports/runset.py +1 -3
  12. wandb/apis/reports/util.py +12 -10
  13. wandb/beta/workflows.py +57 -34
  14. wandb/catboost/__init__.py +1 -2
  15. wandb/cli/cli.py +215 -133
  16. wandb/data_types.py +63 -56
  17. wandb/docker/__init__.py +78 -16
  18. wandb/docker/auth.py +21 -22
  19. wandb/env.py +0 -1
  20. wandb/errors/__init__.py +8 -116
  21. wandb/errors/term.py +1 -1
  22. wandb/fastai/__init__.py +1 -2
  23. wandb/filesync/dir_watcher.py +8 -5
  24. wandb/filesync/step_prepare.py +76 -75
  25. wandb/filesync/step_upload.py +1 -2
  26. wandb/integration/catboost/__init__.py +1 -3
  27. wandb/integration/catboost/catboost.py +8 -14
  28. wandb/integration/fastai/__init__.py +7 -13
  29. wandb/integration/gym/__init__.py +35 -4
  30. wandb/integration/keras/__init__.py +3 -3
  31. wandb/integration/keras/callbacks/metrics_logger.py +9 -8
  32. wandb/integration/keras/callbacks/model_checkpoint.py +9 -9
  33. wandb/integration/keras/callbacks/tables_builder.py +31 -19
  34. wandb/integration/kfp/kfp_patch.py +20 -17
  35. wandb/integration/kfp/wandb_logging.py +1 -2
  36. wandb/integration/lightgbm/__init__.py +21 -19
  37. wandb/integration/prodigy/prodigy.py +6 -7
  38. wandb/integration/sacred/__init__.py +9 -12
  39. wandb/integration/sagemaker/__init__.py +1 -3
  40. wandb/integration/sagemaker/auth.py +0 -1
  41. wandb/integration/sagemaker/config.py +1 -1
  42. wandb/integration/sagemaker/resources.py +1 -1
  43. wandb/integration/sb3/sb3.py +8 -4
  44. wandb/integration/tensorboard/__init__.py +1 -3
  45. wandb/integration/tensorboard/log.py +8 -8
  46. wandb/integration/tensorboard/monkeypatch.py +11 -9
  47. wandb/integration/tensorflow/__init__.py +1 -3
  48. wandb/integration/xgboost/__init__.py +4 -6
  49. wandb/integration/yolov8/__init__.py +7 -0
  50. wandb/integration/yolov8/yolov8.py +250 -0
  51. wandb/jupyter.py +31 -35
  52. wandb/lightgbm/__init__.py +1 -2
  53. wandb/old/settings.py +2 -2
  54. wandb/plot/bar.py +1 -2
  55. wandb/plot/confusion_matrix.py +1 -3
  56. wandb/plot/histogram.py +1 -2
  57. wandb/plot/line.py +1 -2
  58. wandb/plot/line_series.py +4 -4
  59. wandb/plot/pr_curve.py +17 -20
  60. wandb/plot/roc_curve.py +1 -3
  61. wandb/plot/scatter.py +1 -2
  62. wandb/proto/v3/wandb_server_pb2.py +85 -39
  63. wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
  64. wandb/proto/v4/wandb_server_pb2.py +51 -39
  65. wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
  66. wandb/sdk/__init__.py +1 -3
  67. wandb/sdk/backend/backend.py +1 -1
  68. wandb/sdk/data_types/_dtypes.py +38 -30
  69. wandb/sdk/data_types/base_types/json_metadata.py +1 -3
  70. wandb/sdk/data_types/base_types/media.py +17 -17
  71. wandb/sdk/data_types/base_types/wb_value.py +33 -26
  72. wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +91 -125
  73. wandb/sdk/data_types/helper_types/classes.py +1 -1
  74. wandb/sdk/data_types/helper_types/image_mask.py +12 -12
  75. wandb/sdk/data_types/histogram.py +5 -4
  76. wandb/sdk/data_types/html.py +1 -2
  77. wandb/sdk/data_types/image.py +11 -11
  78. wandb/sdk/data_types/molecule.py +3 -6
  79. wandb/sdk/data_types/object_3d.py +1 -2
  80. wandb/sdk/data_types/plotly.py +1 -2
  81. wandb/sdk/data_types/saved_model.py +10 -8
  82. wandb/sdk/data_types/video.py +1 -1
  83. wandb/sdk/integration_utils/data_logging.py +5 -5
  84. wandb/sdk/interface/artifacts.py +288 -266
  85. wandb/sdk/interface/interface.py +2 -3
  86. wandb/sdk/interface/interface_grpc.py +1 -1
  87. wandb/sdk/interface/interface_queue.py +1 -1
  88. wandb/sdk/interface/interface_relay.py +1 -1
  89. wandb/sdk/interface/interface_shared.py +1 -2
  90. wandb/sdk/interface/interface_sock.py +1 -1
  91. wandb/sdk/interface/message_future.py +1 -1
  92. wandb/sdk/interface/message_future_poll.py +1 -1
  93. wandb/sdk/interface/router.py +1 -1
  94. wandb/sdk/interface/router_queue.py +1 -1
  95. wandb/sdk/interface/router_relay.py +1 -1
  96. wandb/sdk/interface/router_sock.py +1 -1
  97. wandb/sdk/interface/summary_record.py +1 -1
  98. wandb/sdk/internal/artifacts.py +1 -1
  99. wandb/sdk/internal/datastore.py +2 -3
  100. wandb/sdk/internal/file_pusher.py +5 -3
  101. wandb/sdk/internal/file_stream.py +22 -19
  102. wandb/sdk/internal/handler.py +5 -4
  103. wandb/sdk/internal/internal.py +1 -1
  104. wandb/sdk/internal/internal_api.py +115 -55
  105. wandb/sdk/internal/job_builder.py +1 -3
  106. wandb/sdk/internal/profiler.py +1 -1
  107. wandb/sdk/internal/progress.py +4 -6
  108. wandb/sdk/internal/sample.py +1 -3
  109. wandb/sdk/internal/sender.py +28 -16
  110. wandb/sdk/internal/settings_static.py +5 -5
  111. wandb/sdk/internal/system/assets/__init__.py +1 -0
  112. wandb/sdk/internal/system/assets/cpu.py +3 -9
  113. wandb/sdk/internal/system/assets/disk.py +2 -4
  114. wandb/sdk/internal/system/assets/gpu.py +6 -18
  115. wandb/sdk/internal/system/assets/gpu_apple.py +2 -4
  116. wandb/sdk/internal/system/assets/interfaces.py +50 -22
  117. wandb/sdk/internal/system/assets/ipu.py +1 -3
  118. wandb/sdk/internal/system/assets/memory.py +7 -13
  119. wandb/sdk/internal/system/assets/network.py +4 -8
  120. wandb/sdk/internal/system/assets/open_metrics.py +283 -0
  121. wandb/sdk/internal/system/assets/tpu.py +1 -4
  122. wandb/sdk/internal/system/assets/trainium.py +26 -14
  123. wandb/sdk/internal/system/system_info.py +2 -3
  124. wandb/sdk/internal/system/system_monitor.py +52 -20
  125. wandb/sdk/internal/tb_watcher.py +12 -13
  126. wandb/sdk/launch/_project_spec.py +54 -65
  127. wandb/sdk/launch/agent/agent.py +374 -90
  128. wandb/sdk/launch/builder/abstract.py +61 -7
  129. wandb/sdk/launch/builder/build.py +81 -110
  130. wandb/sdk/launch/builder/docker_builder.py +181 -0
  131. wandb/sdk/launch/builder/kaniko_builder.py +419 -0
  132. wandb/sdk/launch/builder/noop.py +31 -12
  133. wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +70 -20
  134. wandb/sdk/launch/environment/abstract.py +28 -0
  135. wandb/sdk/launch/environment/aws_environment.py +276 -0
  136. wandb/sdk/launch/environment/gcp_environment.py +271 -0
  137. wandb/sdk/launch/environment/local_environment.py +65 -0
  138. wandb/sdk/launch/github_reference.py +3 -8
  139. wandb/sdk/launch/launch.py +38 -29
  140. wandb/sdk/launch/launch_add.py +6 -8
  141. wandb/sdk/launch/loader.py +230 -0
  142. wandb/sdk/launch/registry/abstract.py +54 -0
  143. wandb/sdk/launch/registry/elastic_container_registry.py +163 -0
  144. wandb/sdk/launch/registry/google_artifact_registry.py +203 -0
  145. wandb/sdk/launch/registry/local_registry.py +62 -0
  146. wandb/sdk/launch/runner/abstract.py +1 -16
  147. wandb/sdk/launch/runner/{kubernetes.py → kubernetes_runner.py} +83 -95
  148. wandb/sdk/launch/runner/local_container.py +46 -22
  149. wandb/sdk/launch/runner/local_process.py +1 -4
  150. wandb/sdk/launch/runner/{aws.py → sagemaker_runner.py} +53 -212
  151. wandb/sdk/launch/runner/{gcp_vertex.py → vertex_runner.py} +38 -55
  152. wandb/sdk/launch/sweeps/__init__.py +3 -2
  153. wandb/sdk/launch/sweeps/scheduler.py +132 -39
  154. wandb/sdk/launch/sweeps/scheduler_sweep.py +80 -89
  155. wandb/sdk/launch/utils.py +101 -30
  156. wandb/sdk/launch/wandb_reference.py +2 -7
  157. wandb/sdk/lib/_settings_toposort_generate.py +166 -0
  158. wandb/sdk/lib/_settings_toposort_generated.py +201 -0
  159. wandb/sdk/lib/apikey.py +2 -4
  160. wandb/sdk/lib/config_util.py +4 -1
  161. wandb/sdk/lib/console.py +1 -3
  162. wandb/sdk/lib/deprecate.py +3 -3
  163. wandb/sdk/lib/file_stream_utils.py +7 -5
  164. wandb/sdk/lib/filenames.py +1 -1
  165. wandb/sdk/lib/filesystem.py +61 -5
  166. wandb/sdk/lib/git.py +1 -3
  167. wandb/sdk/lib/import_hooks.py +4 -7
  168. wandb/sdk/lib/ipython.py +8 -5
  169. wandb/sdk/lib/lazyloader.py +1 -3
  170. wandb/sdk/lib/mailbox.py +14 -4
  171. wandb/sdk/lib/proto_util.py +10 -5
  172. wandb/sdk/lib/redirect.py +15 -22
  173. wandb/sdk/lib/reporting.py +1 -3
  174. wandb/sdk/lib/retry.py +4 -5
  175. wandb/sdk/lib/runid.py +1 -3
  176. wandb/sdk/lib/server.py +15 -9
  177. wandb/sdk/lib/sock_client.py +1 -1
  178. wandb/sdk/lib/sparkline.py +1 -1
  179. wandb/sdk/lib/wburls.py +1 -1
  180. wandb/sdk/service/port_file.py +1 -2
  181. wandb/sdk/service/service.py +36 -13
  182. wandb/sdk/service/service_base.py +12 -1
  183. wandb/sdk/verify/verify.py +5 -7
  184. wandb/sdk/wandb_artifacts.py +142 -177
  185. wandb/sdk/wandb_config.py +5 -8
  186. wandb/sdk/wandb_helper.py +1 -1
  187. wandb/sdk/wandb_init.py +24 -13
  188. wandb/sdk/wandb_login.py +9 -9
  189. wandb/sdk/wandb_manager.py +39 -4
  190. wandb/sdk/wandb_metric.py +2 -6
  191. wandb/sdk/wandb_require.py +4 -15
  192. wandb/sdk/wandb_require_helpers.py +1 -9
  193. wandb/sdk/wandb_run.py +95 -141
  194. wandb/sdk/wandb_save.py +1 -3
  195. wandb/sdk/wandb_settings.py +149 -54
  196. wandb/sdk/wandb_setup.py +66 -46
  197. wandb/sdk/wandb_summary.py +13 -10
  198. wandb/sdk/wandb_sweep.py +6 -7
  199. wandb/sdk/wandb_watch.py +1 -1
  200. wandb/sklearn/calculate/confusion_matrix.py +1 -1
  201. wandb/sklearn/calculate/learning_curve.py +1 -1
  202. wandb/sklearn/calculate/summary_metrics.py +1 -3
  203. wandb/sklearn/plot/__init__.py +1 -1
  204. wandb/sklearn/plot/classifier.py +27 -18
  205. wandb/sklearn/plot/clusterer.py +4 -5
  206. wandb/sklearn/plot/regressor.py +4 -4
  207. wandb/sklearn/plot/shared.py +2 -2
  208. wandb/sync/__init__.py +1 -3
  209. wandb/sync/sync.py +4 -5
  210. wandb/testing/relay.py +11 -10
  211. wandb/trigger.py +1 -1
  212. wandb/util.py +106 -81
  213. wandb/viz.py +4 -4
  214. wandb/wandb_agent.py +50 -50
  215. wandb/wandb_controller.py +2 -3
  216. wandb/wandb_run.py +1 -2
  217. wandb/wandb_torch.py +1 -1
  218. wandb/xgboost/__init__.py +1 -2
  219. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/METADATA +6 -2
  220. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/RECORD +224 -209
  221. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/WHEEL +1 -1
  222. wandb/sdk/launch/builder/docker.py +0 -80
  223. wandb/sdk/launch/builder/kaniko.py +0 -393
  224. wandb/sdk/launch/builder/loader.py +0 -32
  225. wandb/sdk/launch/runner/loader.py +0 -50
  226. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/LICENSE +0 -0
  227. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/entry_points.txt +0 -0
  228. {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/top_level.txt +0 -0
wandb/wandb_agent.py CHANGED
@@ -121,6 +121,47 @@ class AgentProcess:
121
121
  return self._proc.terminate()
122
122
 
123
123
 
124
+ def _create_sweep_command_args(command: Dict) -> Dict[str, Any]:
125
+ """Create various formats of command arguments for the agent.
126
+
127
+ Raises:
128
+ ValueError: improperly formatted command dict
129
+
130
+ """
131
+ if "args" not in command:
132
+ raise ValueError('No "args" found in command: %s' % command)
133
+ # four different formats of command args
134
+ # (1) standard command line flags (e.g. --foo=bar)
135
+ flags: List[str] = []
136
+ # (2) flags without hyphens (e.g. foo=bar)
137
+ flags_no_hyphens: List[str] = []
138
+ # (3) flags with false booleans ommited (e.g. --foo)
139
+ flags_no_booleans: List[str] = []
140
+ # (4) flags as a dictionary (used for constructing a json)
141
+ flags_dict: Dict[str, Any] = {}
142
+ for param, config in command["args"].items():
143
+ _value: Any = config.get("value", None)
144
+ if _value is None:
145
+ raise ValueError('No "value" found for command["args"]["%s"]' % param)
146
+ _flag: str = f"{param}={_value}"
147
+ flags.append("--" + _flag)
148
+ flags_no_hyphens.append(_flag)
149
+ if isinstance(_value, bool):
150
+ # omit flags if they are boolean and false
151
+ if _value:
152
+ flags_no_booleans.append("--" + param)
153
+ else:
154
+ flags_no_booleans.append("--" + _flag)
155
+ flags_dict[param] = _value
156
+ return {
157
+ "args": flags,
158
+ "args_no_hyphens": flags_no_hyphens,
159
+ "args_no_boolean_flags": flags_no_booleans,
160
+ "args_json": [json.dumps(flags_dict)],
161
+ "args_dict": flags_dict,
162
+ }
163
+
164
+
124
165
  class Agent:
125
166
  POLL_INTERVAL = 5
126
167
  REPORT_INTERVAL = 0
@@ -169,8 +210,11 @@ class Agent:
169
210
  os.environ["WANDB_DIR"] = os.path.abspath(os.getcwd())
170
211
 
171
212
  def is_flapping(self):
172
- """Flapping occurs if the agents receives FLAPPING_MAX_FAILURES non-0
173
- exit codes in the first FLAPPING_MAX_SECONDS"""
213
+ """Determine if the process is flapping.
214
+
215
+ Flapping occurs if the agents receives FLAPPING_MAX_FAILURES non-0 exit codes in
216
+ the first FLAPPING_MAX_SECONDS.
217
+ """
174
218
  if os.getenv(wandb.env.AGENT_DISABLE_FLAPPING) == "true":
175
219
  return False
176
220
  if time.time() < wandb.START_TIME + self.FLAPPING_MAX_SECONDS:
@@ -183,7 +227,6 @@ class Agent:
183
227
  )
184
228
 
185
229
  def run(self): # noqa: C901
186
-
187
230
  # TODO: catch exceptions, handle errors, show validation warnings, and make more generic
188
231
  sweep_obj = self._api.sweep(self._sweep_id, "{}")
189
232
  if sweep_obj:
@@ -340,50 +383,9 @@ class Agent:
340
383
 
341
384
  return response
342
385
 
343
- @staticmethod
344
- def _create_command_args(command: Dict) -> Dict[str, Any]:
345
- """Create various formats of command arguments for the agent.
346
-
347
- Raises:
348
- ValueError: improperly formatted command dict
349
-
350
- """
351
- if "args" not in command:
352
- raise ValueError('No "args" found in command: %s' % command)
353
- # four different formats of command args
354
- # (1) standard command line flags (e.g. --foo=bar)
355
- flags: List[str] = []
356
- # (2) flags without hyphens (e.g. foo=bar)
357
- flags_no_hyphens: List[str] = []
358
- # (3) flags with false booleans ommited (e.g. --foo)
359
- flags_no_booleans: List[str] = []
360
- # (4) flags as a dictionary (used for constructing a json)
361
- flags_dict: Dict[str, Any] = {}
362
- for param, config in command["args"].items():
363
- _value: Any = config.get("value", None)
364
- if _value is None:
365
- raise ValueError('No "value" found for command["args"]["%s"]' % param)
366
- _flag: str = f"{param}={_value}"
367
- flags.append("--" + _flag)
368
- flags_no_hyphens.append(_flag)
369
- if isinstance(_value, bool):
370
- # omit flags if they are boolean and false
371
- if _value:
372
- flags_no_booleans.append("--" + param)
373
- else:
374
- flags_no_booleans.append("--" + _flag)
375
- flags_dict[param] = _value
376
- return {
377
- "args": flags,
378
- "args_no_hyphens": flags_no_hyphens,
379
- "args_no_boolean_flags": flags_no_booleans,
380
- "args_json": [json.dumps(flags_dict)],
381
- "args_dict": flags_dict,
382
- }
383
-
384
386
  @staticmethod
385
387
  def _create_sweep_command(command: Optional[List] = None) -> List:
386
- """Returns sweep command, filling in environment variable macros."""
388
+ """Return sweep command, filling in environment variable macros."""
387
389
  # Start from default sweep command
388
390
  command = command or Agent.DEFAULT_SWEEP_COMMAND
389
391
  for i, chunk in enumerate(command):
@@ -442,7 +444,7 @@ class Agent:
442
444
 
443
445
  env = dict(os.environ)
444
446
 
445
- sweep_vars: Dict[str, Any] = Agent._create_command_args(command)
447
+ sweep_vars: Dict[str, Any] = _create_sweep_command_args(command)
446
448
 
447
449
  if "${args_json_file}" in sweep_command:
448
450
  with open(json_file, "w") as fp:
@@ -588,11 +590,9 @@ def run_agent(
588
590
 
589
591
 
590
592
  def agent(sweep_id, function=None, entity=None, project=None, count=None):
591
- """
592
- Generic agent entrypoint, used for CLI or jupyter.
593
+ """Run a function or program with configuration parameters specified by server.
593
594
 
594
- Will run a function or program with configuration parameters specified
595
- by server.
595
+ Generic agent entrypoint, used for CLI or jupyter.
596
596
 
597
597
  Arguments:
598
598
  sweep_id: (dict) Sweep ID generated by CLI or sweep API
wandb/wandb_controller.py CHANGED
@@ -87,7 +87,7 @@ def _id_generator(size=10, chars=string.ascii_lowercase + string.digits):
87
87
 
88
88
 
89
89
  class ControllerError(Exception):
90
- """Base class for sweep errors"""
90
+ """Base class for sweep errors."""
91
91
 
92
92
  pass
93
93
 
@@ -128,7 +128,6 @@ class _WandbController:
128
128
  """
129
129
 
130
130
  def __init__(self, sweep_id_or_config=None, entity=None, project=None):
131
-
132
131
  # sweep id configured in constuctor
133
132
  self._sweep_id: Optional[str] = None
134
133
 
@@ -327,7 +326,7 @@ class _WandbController:
327
326
  self._create["parameters"][name]["b"] = b
328
327
 
329
328
  def configure_controller(self, type):
330
- """configure controller to local if type == 'local'."""
329
+ """Configure controller to local if type == 'local'."""
331
330
  self._configure_check()
332
331
  self._create.setdefault("controller", {})
333
332
  self._create["controller"].setdefault("type", type)
wandb/wandb_run.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Compatibility wandb_run module.
1
+ """Compatibility wandb_run module.
3
2
 
4
3
  In the future use:
5
4
  from wandb.sdk.wandb_run import Run
wandb/wandb_torch.py CHANGED
@@ -16,7 +16,7 @@ torch = None
16
16
 
17
17
 
18
18
  def nested_shape(array_or_tuple, seen=None):
19
- """Figures out the shape of tensors possibly embedded in tuples
19
+ """Figure out the shape of tensors possibly embedded in tuples
20
20
  i.e
21
21
  [0,0] returns (2)
22
22
  ([0,0], [0,0]) returns (2,2)
wandb/xgboost/__init__.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Compatibility xgboost module.
1
+ """Compatibility xgboost module.
3
2
 
4
3
  In the future use:
5
4
  from wandb.integration.xgboost import wandb_callback
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wandb
3
- Version: 0.13.10
3
+ Version: 0.14.0
4
4
  Summary: A CLI and library for interacting with the Weights and Biases API.
5
5
  Home-page: https://github.com/wandb/wandb
6
6
  Author: Weights & Biases
@@ -25,7 +25,7 @@ Requires-Python: >=3.6
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: Click (!=8.0.0,>=7.0)
28
- Requires-Dist: GitPython (>=1.0.0)
28
+ Requires-Dist: GitPython (!=3.1.29,>=1.0.0)
29
29
  Requires-Dist: requests (<3,>=2.0.0)
30
30
  Requires-Dist: psutil (>=5.0.0)
31
31
  Requires-Dist: sentry-sdk (>=1.0.0)
@@ -55,6 +55,7 @@ Requires-Dist: minio ; extra == 'kubeflow'
55
55
  Requires-Dist: google-cloud-storage ; extra == 'kubeflow'
56
56
  Requires-Dist: sh ; extra == 'kubeflow'
57
57
  Provides-Extra: launch
58
+ Requires-Dist: awscli ; extra == 'launch'
58
59
  Requires-Dist: nbconvert ; extra == 'launch'
59
60
  Requires-Dist: nbformat ; extra == 'launch'
60
61
  Requires-Dist: chardet ; extra == 'launch'
@@ -62,7 +63,10 @@ Requires-Dist: iso8601 ; extra == 'launch'
62
63
  Requires-Dist: typing-extensions ; extra == 'launch'
63
64
  Requires-Dist: boto3 ; extra == 'launch'
64
65
  Requires-Dist: botocore ; extra == 'launch'
66
+ Requires-Dist: google-auth ; extra == 'launch'
67
+ Requires-Dist: google-cloud-compute ; extra == 'launch'
65
68
  Requires-Dist: google-cloud-storage ; extra == 'launch'
69
+ Requires-Dist: google-cloud-artifact-registry ; extra == 'launch'
66
70
  Requires-Dist: kubernetes ; extra == 'launch'
67
71
  Provides-Extra: media
68
72
  Requires-Dist: numpy ; extra == 'media'