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.
- package_readme.md +89 -0
- wandb/__init__.py +245 -0
- wandb/__init__.pyi +1139 -0
- wandb/__main__.py +3 -0
- wandb/_globals.py +19 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +363 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +266 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +40 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +385 -0
- wandb/apis/importers/internals/protocols.py +99 -0
- wandb/apis/importers/internals/util.py +78 -0
- wandb/apis/importers/mlflow.py +254 -0
- wandb/apis/importers/validation.py +108 -0
- wandb/apis/importers/wandb.py +1603 -0
- wandb/apis/internal.py +232 -0
- wandb/apis/normalize.py +89 -0
- wandb/apis/paginator.py +81 -0
- wandb/apis/public/__init__.py +34 -0
- wandb/apis/public/api.py +1305 -0
- wandb/apis/public/artifacts.py +1090 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +195 -0
- wandb/apis/public/history.py +149 -0
- wandb/apis/public/jobs.py +659 -0
- wandb/apis/public/projects.py +154 -0
- wandb/apis/public/query_generator.py +166 -0
- wandb/apis/public/reports.py +469 -0
- wandb/apis/public/runs.py +914 -0
- wandb/apis/public/sweeps.py +240 -0
- wandb/apis/public/teams.py +198 -0
- wandb/apis/public/users.py +136 -0
- wandb/apis/reports/__init__.py +1 -0
- wandb/apis/reports/v1/__init__.py +8 -0
- wandb/apis/reports/v2/__init__.py +8 -0
- wandb/apis/workspaces/__init__.py +8 -0
- wandb/beta/workflows.py +288 -0
- wandb/bin/nvidia_gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/cli.py +3004 -0
- wandb/data_types.py +63 -0
- wandb/docker/__init__.py +342 -0
- wandb/docker/auth.py +436 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/docker/www_authenticate.py +94 -0
- wandb/env.py +514 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +37 -0
- wandb/errors/term.py +103 -0
- wandb/errors/util.py +57 -0
- wandb/errors/warnings.py +2 -0
- wandb/filesync/__init__.py +0 -0
- wandb/filesync/dir_watcher.py +403 -0
- wandb/filesync/stats.py +100 -0
- wandb/filesync/step_checksum.py +142 -0
- wandb/filesync/step_prepare.py +179 -0
- wandb/filesync/step_upload.py +290 -0
- wandb/filesync/upload_job.py +142 -0
- wandb/integration/__init__.py +0 -0
- wandb/integration/catboost/__init__.py +5 -0
- wandb/integration/catboost/catboost.py +178 -0
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/diffusers/__init__.py +3 -0
- wandb/integration/diffusers/autologger.py +76 -0
- wandb/integration/diffusers/pipeline_resolver.py +50 -0
- wandb/integration/diffusers/resolvers/__init__.py +9 -0
- wandb/integration/diffusers/resolvers/multimodal.py +882 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +249 -0
- wandb/integration/gym/__init__.py +105 -0
- wandb/integration/huggingface/__init__.py +3 -0
- wandb/integration/huggingface/huggingface.py +18 -0
- wandb/integration/huggingface/resolver.py +213 -0
- wandb/integration/keras/__init__.py +11 -0
- wandb/integration/keras/callbacks/__init__.py +5 -0
- wandb/integration/keras/callbacks/metrics_logger.py +136 -0
- wandb/integration/keras/callbacks/model_checkpoint.py +195 -0
- wandb/integration/keras/callbacks/tables_builder.py +226 -0
- wandb/integration/keras/keras.py +1091 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +324 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +48 -0
- wandb/integration/lightgbm/__init__.py +239 -0
- wandb/integration/lightning/__init__.py +0 -0
- wandb/integration/lightning/fabric/__init__.py +3 -0
- wandb/integration/lightning/fabric/logger.py +762 -0
- wandb/integration/magic.py +556 -0
- wandb/integration/metaflow/__init__.py +3 -0
- wandb/integration/metaflow/metaflow.py +383 -0
- wandb/integration/openai/__init__.py +3 -0
- wandb/integration/openai/fine_tuning.py +480 -0
- wandb/integration/openai/openai.py +22 -0
- wandb/integration/openai/resolver.py +240 -0
- wandb/integration/prodigy/__init__.py +3 -0
- wandb/integration/prodigy/prodigy.py +299 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +12 -0
- wandb/integration/sagemaker/auth.py +28 -0
- wandb/integration/sagemaker/config.py +49 -0
- wandb/integration/sagemaker/files.py +3 -0
- wandb/integration/sagemaker/resources.py +34 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +153 -0
- wandb/integration/sklearn/__init__.py +37 -0
- wandb/integration/sklearn/calculate/__init__.py +32 -0
- wandb/integration/sklearn/calculate/calibration_curves.py +125 -0
- wandb/integration/sklearn/calculate/class_proportions.py +68 -0
- wandb/integration/sklearn/calculate/confusion_matrix.py +93 -0
- wandb/integration/sklearn/calculate/decision_boundaries.py +40 -0
- wandb/integration/sklearn/calculate/elbow_curve.py +55 -0
- wandb/integration/sklearn/calculate/feature_importances.py +67 -0
- wandb/integration/sklearn/calculate/learning_curve.py +64 -0
- wandb/integration/sklearn/calculate/outlier_candidates.py +69 -0
- wandb/integration/sklearn/calculate/residuals.py +86 -0
- wandb/integration/sklearn/calculate/silhouette.py +118 -0
- wandb/integration/sklearn/calculate/summary_metrics.py +62 -0
- wandb/integration/sklearn/plot/__init__.py +35 -0
- wandb/integration/sklearn/plot/classifier.py +329 -0
- wandb/integration/sklearn/plot/clusterer.py +146 -0
- wandb/integration/sklearn/plot/regressor.py +121 -0
- wandb/integration/sklearn/plot/shared.py +91 -0
- wandb/integration/sklearn/utils.py +183 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +355 -0
- wandb/integration/tensorboard/monkeypatch.py +185 -0
- wandb/integration/tensorflow/__init__.py +5 -0
- wandb/integration/tensorflow/estimator_hook.py +54 -0
- wandb/integration/torch/__init__.py +0 -0
- wandb/integration/torch/wandb_torch.py +554 -0
- wandb/integration/ultralytics/__init__.py +11 -0
- wandb/integration/ultralytics/bbox_utils.py +208 -0
- wandb/integration/ultralytics/callback.py +524 -0
- wandb/integration/ultralytics/classification_utils.py +83 -0
- wandb/integration/ultralytics/mask_utils.py +202 -0
- wandb/integration/ultralytics/pose_utils.py +103 -0
- wandb/integration/xgboost/__init__.py +11 -0
- wandb/integration/xgboost/xgboost.py +189 -0
- wandb/integration/yolov8/__init__.py +0 -0
- wandb/integration/yolov8/yolov8.py +284 -0
- wandb/jupyter.py +515 -0
- wandb/magic.py +3 -0
- wandb/mpmain/__init__.py +0 -0
- wandb/mpmain/__main__.py +1 -0
- wandb/old/__init__.py +0 -0
- wandb/old/core.py +53 -0
- wandb/old/settings.py +173 -0
- wandb/old/summary.py +440 -0
- wandb/plot/__init__.py +19 -0
- wandb/plot/bar.py +45 -0
- wandb/plot/confusion_matrix.py +100 -0
- wandb/plot/histogram.py +39 -0
- wandb/plot/line.py +43 -0
- wandb/plot/line_series.py +88 -0
- wandb/plot/pr_curve.py +136 -0
- wandb/plot/roc_curve.py +118 -0
- wandb/plot/scatter.py +32 -0
- wandb/plot/utils.py +183 -0
- wandb/plot/viz.py +123 -0
- wandb/proto/__init__.py +0 -0
- wandb/proto/v3/__init__.py +0 -0
- wandb/proto/v3/wandb_base_pb2.py +55 -0
- wandb/proto/v3/wandb_internal_pb2.py +1608 -0
- wandb/proto/v3/wandb_server_pb2.py +208 -0
- wandb/proto/v3/wandb_settings_pb2.py +112 -0
- wandb/proto/v3/wandb_telemetry_pb2.py +106 -0
- wandb/proto/v4/__init__.py +0 -0
- wandb/proto/v4/wandb_base_pb2.py +30 -0
- wandb/proto/v4/wandb_internal_pb2.py +360 -0
- wandb/proto/v4/wandb_server_pb2.py +63 -0
- wandb/proto/v4/wandb_settings_pb2.py +45 -0
- wandb/proto/v4/wandb_telemetry_pb2.py +41 -0
- wandb/proto/v5/wandb_base_pb2.py +31 -0
- wandb/proto/v5/wandb_internal_pb2.py +361 -0
- wandb/proto/v5/wandb_server_pb2.py +64 -0
- wandb/proto/v5/wandb_settings_pb2.py +46 -0
- wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
- wandb/proto/wandb_base_pb2.py +10 -0
- wandb/proto/wandb_deprecated.py +53 -0
- wandb/proto/wandb_generate_deprecated.py +34 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +16 -0
- wandb/proto/wandb_server_pb2.py +10 -0
- wandb/proto/wandb_settings_pb2.py +10 -0
- wandb/proto/wandb_telemetry_pb2.py +10 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_validators.py +90 -0
- wandb/sdk/artifacts/artifact.py +2389 -0
- wandb/sdk/artifacts/artifact_download_logger.py +43 -0
- wandb/sdk/artifacts/artifact_file_cache.py +253 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +74 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
- wandb/sdk/artifacts/artifact_saver.py +269 -0
- wandb/sdk/artifacts/artifact_state.py +11 -0
- wandb/sdk/artifacts/artifact_ttl.py +7 -0
- wandb/sdk/artifacts/exceptions.py +57 -0
- wandb/sdk/artifacts/staging.py +25 -0
- wandb/sdk/artifacts/storage_handler.py +62 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +208 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +228 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +141 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +300 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
- wandb/sdk/artifacts/storage_policies/register.py +1 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
- wandb/sdk/artifacts/storage_policy.py +72 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +222 -0
- wandb/sdk/data_types/__init__.py +0 -0
- wandb/sdk/data_types/_dtypes.py +914 -0
- wandb/sdk/data_types/_private.py +10 -0
- wandb/sdk/data_types/audio.py +165 -0
- wandb/sdk/data_types/base_types/__init__.py +0 -0
- wandb/sdk/data_types/base_types/json_metadata.py +55 -0
- wandb/sdk/data_types/base_types/media.py +315 -0
- wandb/sdk/data_types/base_types/wb_value.py +272 -0
- wandb/sdk/data_types/bokeh.py +70 -0
- wandb/sdk/data_types/graph.py +405 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +295 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +235 -0
- wandb/sdk/data_types/histogram.py +96 -0
- wandb/sdk/data_types/html.py +115 -0
- wandb/sdk/data_types/image.py +845 -0
- wandb/sdk/data_types/molecule.py +241 -0
- wandb/sdk/data_types/object_3d.py +474 -0
- wandb/sdk/data_types/plotly.py +82 -0
- wandb/sdk/data_types/saved_model.py +446 -0
- wandb/sdk/data_types/table.py +1204 -0
- wandb/sdk/data_types/trace_tree.py +438 -0
- wandb/sdk/data_types/utils.py +229 -0
- wandb/sdk/data_types/video.py +247 -0
- wandb/sdk/integration_utils/__init__.py +0 -0
- wandb/sdk/integration_utils/auto_logging.py +239 -0
- wandb/sdk/integration_utils/data_logging.py +475 -0
- wandb/sdk/interface/__init__.py +0 -0
- wandb/sdk/interface/constants.py +4 -0
- wandb/sdk/interface/interface.py +972 -0
- wandb/sdk/interface/interface_queue.py +59 -0
- wandb/sdk/interface/interface_relay.py +53 -0
- wandb/sdk/interface/interface_shared.py +537 -0
- wandb/sdk/interface/interface_sock.py +61 -0
- wandb/sdk/interface/message_future.py +27 -0
- wandb/sdk/interface/message_future_poll.py +50 -0
- wandb/sdk/interface/router.py +118 -0
- wandb/sdk/interface/router_queue.py +44 -0
- wandb/sdk/interface/router_relay.py +39 -0
- wandb/sdk/interface/router_sock.py +36 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +297 -0
- wandb/sdk/internal/file_pusher.py +181 -0
- wandb/sdk/internal/file_stream.py +695 -0
- wandb/sdk/internal/flow_control.py +263 -0
- wandb/sdk/internal/handler.py +901 -0
- wandb/sdk/internal/internal.py +417 -0
- wandb/sdk/internal/internal_api.py +4358 -0
- wandb/sdk/internal/internal_util.py +100 -0
- wandb/sdk/internal/job_builder.py +629 -0
- wandb/sdk/internal/profiler.py +78 -0
- wandb/sdk/internal/progress.py +83 -0
- wandb/sdk/internal/run.py +25 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1686 -0
- wandb/sdk/internal/sender_config.py +197 -0
- wandb/sdk/internal/settings_static.py +90 -0
- wandb/sdk/internal/system/__init__.py +0 -0
- wandb/sdk/internal/system/assets/__init__.py +27 -0
- wandb/sdk/internal/system/assets/aggregators.py +37 -0
- wandb/sdk/internal/system/assets/asset_registry.py +20 -0
- wandb/sdk/internal/system/assets/cpu.py +163 -0
- wandb/sdk/internal/system/assets/disk.py +210 -0
- wandb/sdk/internal/system/assets/gpu.py +416 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +239 -0
- wandb/sdk/internal/system/assets/gpu_apple.py +177 -0
- wandb/sdk/internal/system/assets/interfaces.py +207 -0
- wandb/sdk/internal/system/assets/ipu.py +177 -0
- wandb/sdk/internal/system/assets/memory.py +166 -0
- wandb/sdk/internal/system/assets/network.py +125 -0
- wandb/sdk/internal/system/assets/open_metrics.py +299 -0
- wandb/sdk/internal/system/assets/tpu.py +154 -0
- wandb/sdk/internal/system/assets/trainium.py +399 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +249 -0
- wandb/sdk/internal/system/system_monitor.py +229 -0
- wandb/sdk/internal/tb_watcher.py +518 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/internal/writer.py +206 -0
- wandb/sdk/launch/__init__.py +14 -0
- wandb/sdk/launch/_launch.py +330 -0
- wandb/sdk/launch/_launch_add.py +255 -0
- wandb/sdk/launch/_project_spec.py +566 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +924 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +53 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +297 -0
- wandb/sdk/launch/builder/context_manager.py +235 -0
- wandb/sdk/launch/builder/docker_builder.py +177 -0
- wandb/sdk/launch/builder/kaniko_builder.py +595 -0
- wandb/sdk/launch/builder/noop.py +58 -0
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
- wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
- wandb/sdk/launch/create_job.py +528 -0
- wandb/sdk/launch/environment/abstract.py +29 -0
- wandb/sdk/launch/environment/aws_environment.py +322 -0
- wandb/sdk/launch/environment/azure_environment.py +105 -0
- wandb/sdk/launch/environment/gcp_environment.py +335 -0
- wandb/sdk/launch/environment/local_environment.py +66 -0
- wandb/sdk/launch/errors.py +19 -0
- wandb/sdk/launch/git_reference.py +109 -0
- wandb/sdk/launch/inputs/files.py +148 -0
- wandb/sdk/launch/inputs/internal.py +315 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/loader.py +249 -0
- wandb/sdk/launch/registry/abstract.py +48 -0
- wandb/sdk/launch/registry/anon.py +29 -0
- wandb/sdk/launch/registry/azure_container_registry.py +124 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
- wandb/sdk/launch/registry/local_registry.py +67 -0
- wandb/sdk/launch/runner/__init__.py +0 -0
- wandb/sdk/launch/runner/abstract.py +195 -0
- wandb/sdk/launch/runner/kubernetes_monitor.py +474 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
- wandb/sdk/launch/runner/local_container.py +301 -0
- wandb/sdk/launch/runner/local_process.py +78 -0
- wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
- wandb/sdk/launch/runner/vertex_runner.py +230 -0
- wandb/sdk/launch/sweeps/__init__.py +39 -0
- wandb/sdk/launch/sweeps/scheduler.py +742 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +91 -0
- wandb/sdk/launch/sweeps/utils.py +316 -0
- wandb/sdk/launch/utils.py +746 -0
- wandb/sdk/launch/wandb_reference.py +138 -0
- wandb/sdk/lib/__init__.py +5 -0
- wandb/sdk/lib/_settings_toposort_generate.py +159 -0
- wandb/sdk/lib/_settings_toposort_generated.py +250 -0
- wandb/sdk/lib/_wburls_generate.py +25 -0
- wandb/sdk/lib/_wburls_generated.py +22 -0
- wandb/sdk/lib/apikey.py +273 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +42 -0
- wandb/sdk/lib/disabled.py +29 -0
- wandb/sdk/lib/exit_hooks.py +54 -0
- wandb/sdk/lib/file_stream_utils.py +118 -0
- wandb/sdk/lib/filenames.py +64 -0
- wandb/sdk/lib/filesystem.py +372 -0
- wandb/sdk/lib/fsm.py +174 -0
- wandb/sdk/lib/gitlib.py +239 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +84 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/ipython.py +146 -0
- wandb/sdk/lib/json_util.py +80 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/mailbox.py +460 -0
- wandb/sdk/lib/module.py +69 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +313 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +845 -0
- wandb/sdk/lib/reporting.py +99 -0
- wandb/sdk/lib/retry.py +289 -0
- wandb/sdk/lib/run_moment.py +78 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +52 -0
- wandb/sdk/lib/service_connection.py +216 -0
- wandb/sdk/lib/service_token.py +94 -0
- wandb/sdk/lib/sock_client.py +295 -0
- wandb/sdk/lib/sparkline.py +45 -0
- wandb/sdk/lib/telemetry.py +100 -0
- wandb/sdk/lib/timed_input.py +133 -0
- wandb/sdk/lib/timer.py +19 -0
- wandb/sdk/lib/tracelog.py +255 -0
- wandb/sdk/lib/wburls.py +46 -0
- wandb/sdk/service/__init__.py +0 -0
- wandb/sdk/service/_startup_debug.py +22 -0
- wandb/sdk/service/port_file.py +53 -0
- wandb/sdk/service/server.py +116 -0
- wandb/sdk/service/server_sock.py +276 -0
- wandb/sdk/service/service.py +242 -0
- wandb/sdk/service/streams.py +417 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +501 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +322 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1266 -0
- wandb/sdk/wandb_login.py +349 -0
- wandb/sdk/wandb_metric.py +110 -0
- wandb/sdk/wandb_require.py +97 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4236 -0
- wandb/sdk/wandb_settings.py +2001 -0
- wandb/sdk/wandb_setup.py +409 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +119 -0
- wandb/sdk/wandb_sync.py +81 -0
- wandb/sdk/wandb_watch.py +144 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +443 -0
- wandb/trigger.py +29 -0
- wandb/util.py +1956 -0
- wandb/vendor/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/setup.py +40 -0
- wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
- wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
- wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
- wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
- wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
- wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
- wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
- wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
- wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
- wandb/vendor/graphql-core-1.1/setup.py +86 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
- wandb/vendor/promise-2.3.0/conftest.py +30 -0
- wandb/vendor/promise-2.3.0/setup.py +64 -0
- wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
- wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
- wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
- wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
- wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
- wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
- wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
- wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
- wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
- wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
- wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
- wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
- wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
- wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
- wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
- wandb/vendor/pygments/__init__.py +90 -0
- wandb/vendor/pygments/cmdline.py +568 -0
- wandb/vendor/pygments/console.py +74 -0
- wandb/vendor/pygments/filter.py +74 -0
- wandb/vendor/pygments/filters/__init__.py +350 -0
- wandb/vendor/pygments/formatter.py +95 -0
- wandb/vendor/pygments/formatters/__init__.py +153 -0
- wandb/vendor/pygments/formatters/_mapping.py +85 -0
- wandb/vendor/pygments/formatters/bbcode.py +109 -0
- wandb/vendor/pygments/formatters/html.py +851 -0
- wandb/vendor/pygments/formatters/img.py +600 -0
- wandb/vendor/pygments/formatters/irc.py +182 -0
- wandb/vendor/pygments/formatters/latex.py +482 -0
- wandb/vendor/pygments/formatters/other.py +160 -0
- wandb/vendor/pygments/formatters/rtf.py +147 -0
- wandb/vendor/pygments/formatters/svg.py +153 -0
- wandb/vendor/pygments/formatters/terminal.py +136 -0
- wandb/vendor/pygments/formatters/terminal256.py +309 -0
- wandb/vendor/pygments/lexer.py +871 -0
- wandb/vendor/pygments/lexers/__init__.py +329 -0
- wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
- wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
- wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
- wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
- wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
- wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
- wandb/vendor/pygments/lexers/_mapping.py +500 -0
- wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
- wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
- wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
- wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
- wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
- wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
- wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
- wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
- wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
- wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
- wandb/vendor/pygments/lexers/actionscript.py +240 -0
- wandb/vendor/pygments/lexers/agile.py +24 -0
- wandb/vendor/pygments/lexers/algebra.py +221 -0
- wandb/vendor/pygments/lexers/ambient.py +76 -0
- wandb/vendor/pygments/lexers/ampl.py +87 -0
- wandb/vendor/pygments/lexers/apl.py +101 -0
- wandb/vendor/pygments/lexers/archetype.py +318 -0
- wandb/vendor/pygments/lexers/asm.py +641 -0
- wandb/vendor/pygments/lexers/automation.py +374 -0
- wandb/vendor/pygments/lexers/basic.py +500 -0
- wandb/vendor/pygments/lexers/bibtex.py +160 -0
- wandb/vendor/pygments/lexers/business.py +612 -0
- wandb/vendor/pygments/lexers/c_cpp.py +252 -0
- wandb/vendor/pygments/lexers/c_like.py +541 -0
- wandb/vendor/pygments/lexers/capnproto.py +78 -0
- wandb/vendor/pygments/lexers/chapel.py +102 -0
- wandb/vendor/pygments/lexers/clean.py +288 -0
- wandb/vendor/pygments/lexers/compiled.py +34 -0
- wandb/vendor/pygments/lexers/configs.py +833 -0
- wandb/vendor/pygments/lexers/console.py +114 -0
- wandb/vendor/pygments/lexers/crystal.py +393 -0
- wandb/vendor/pygments/lexers/csound.py +366 -0
- wandb/vendor/pygments/lexers/css.py +689 -0
- wandb/vendor/pygments/lexers/d.py +251 -0
- wandb/vendor/pygments/lexers/dalvik.py +125 -0
- wandb/vendor/pygments/lexers/data.py +555 -0
- wandb/vendor/pygments/lexers/diff.py +165 -0
- wandb/vendor/pygments/lexers/dotnet.py +691 -0
- wandb/vendor/pygments/lexers/dsls.py +878 -0
- wandb/vendor/pygments/lexers/dylan.py +289 -0
- wandb/vendor/pygments/lexers/ecl.py +125 -0
- wandb/vendor/pygments/lexers/eiffel.py +65 -0
- wandb/vendor/pygments/lexers/elm.py +121 -0
- wandb/vendor/pygments/lexers/erlang.py +533 -0
- wandb/vendor/pygments/lexers/esoteric.py +277 -0
- wandb/vendor/pygments/lexers/ezhil.py +69 -0
- wandb/vendor/pygments/lexers/factor.py +344 -0
- wandb/vendor/pygments/lexers/fantom.py +250 -0
- wandb/vendor/pygments/lexers/felix.py +273 -0
- wandb/vendor/pygments/lexers/forth.py +177 -0
- wandb/vendor/pygments/lexers/fortran.py +205 -0
- wandb/vendor/pygments/lexers/foxpro.py +428 -0
- wandb/vendor/pygments/lexers/functional.py +21 -0
- wandb/vendor/pygments/lexers/go.py +101 -0
- wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
- wandb/vendor/pygments/lexers/graph.py +80 -0
- wandb/vendor/pygments/lexers/graphics.py +553 -0
- wandb/vendor/pygments/lexers/haskell.py +843 -0
- wandb/vendor/pygments/lexers/haxe.py +936 -0
- wandb/vendor/pygments/lexers/hdl.py +382 -0
- wandb/vendor/pygments/lexers/hexdump.py +103 -0
- wandb/vendor/pygments/lexers/html.py +602 -0
- wandb/vendor/pygments/lexers/idl.py +270 -0
- wandb/vendor/pygments/lexers/igor.py +288 -0
- wandb/vendor/pygments/lexers/inferno.py +96 -0
- wandb/vendor/pygments/lexers/installers.py +322 -0
- wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
- wandb/vendor/pygments/lexers/iolang.py +63 -0
- wandb/vendor/pygments/lexers/j.py +146 -0
- wandb/vendor/pygments/lexers/javascript.py +1525 -0
- wandb/vendor/pygments/lexers/julia.py +333 -0
- wandb/vendor/pygments/lexers/jvm.py +1573 -0
- wandb/vendor/pygments/lexers/lisp.py +2621 -0
- wandb/vendor/pygments/lexers/make.py +202 -0
- wandb/vendor/pygments/lexers/markup.py +595 -0
- wandb/vendor/pygments/lexers/math.py +21 -0
- wandb/vendor/pygments/lexers/matlab.py +663 -0
- wandb/vendor/pygments/lexers/ml.py +769 -0
- wandb/vendor/pygments/lexers/modeling.py +358 -0
- wandb/vendor/pygments/lexers/modula2.py +1561 -0
- wandb/vendor/pygments/lexers/monte.py +204 -0
- wandb/vendor/pygments/lexers/ncl.py +894 -0
- wandb/vendor/pygments/lexers/nimrod.py +159 -0
- wandb/vendor/pygments/lexers/nit.py +64 -0
- wandb/vendor/pygments/lexers/nix.py +136 -0
- wandb/vendor/pygments/lexers/oberon.py +105 -0
- wandb/vendor/pygments/lexers/objective.py +504 -0
- wandb/vendor/pygments/lexers/ooc.py +85 -0
- wandb/vendor/pygments/lexers/other.py +41 -0
- wandb/vendor/pygments/lexers/parasail.py +79 -0
- wandb/vendor/pygments/lexers/parsers.py +835 -0
- wandb/vendor/pygments/lexers/pascal.py +644 -0
- wandb/vendor/pygments/lexers/pawn.py +199 -0
- wandb/vendor/pygments/lexers/perl.py +620 -0
- wandb/vendor/pygments/lexers/php.py +267 -0
- wandb/vendor/pygments/lexers/praat.py +294 -0
- wandb/vendor/pygments/lexers/prolog.py +306 -0
- wandb/vendor/pygments/lexers/python.py +939 -0
- wandb/vendor/pygments/lexers/qvt.py +152 -0
- wandb/vendor/pygments/lexers/r.py +453 -0
- wandb/vendor/pygments/lexers/rdf.py +270 -0
- wandb/vendor/pygments/lexers/rebol.py +431 -0
- wandb/vendor/pygments/lexers/resource.py +85 -0
- wandb/vendor/pygments/lexers/rnc.py +67 -0
- wandb/vendor/pygments/lexers/roboconf.py +82 -0
- wandb/vendor/pygments/lexers/robotframework.py +560 -0
- wandb/vendor/pygments/lexers/ruby.py +519 -0
- wandb/vendor/pygments/lexers/rust.py +220 -0
- wandb/vendor/pygments/lexers/sas.py +228 -0
- wandb/vendor/pygments/lexers/scripting.py +1222 -0
- wandb/vendor/pygments/lexers/shell.py +794 -0
- wandb/vendor/pygments/lexers/smalltalk.py +195 -0
- wandb/vendor/pygments/lexers/smv.py +79 -0
- wandb/vendor/pygments/lexers/snobol.py +83 -0
- wandb/vendor/pygments/lexers/special.py +103 -0
- wandb/vendor/pygments/lexers/sql.py +681 -0
- wandb/vendor/pygments/lexers/stata.py +108 -0
- wandb/vendor/pygments/lexers/supercollider.py +90 -0
- wandb/vendor/pygments/lexers/tcl.py +145 -0
- wandb/vendor/pygments/lexers/templates.py +2283 -0
- wandb/vendor/pygments/lexers/testing.py +207 -0
- wandb/vendor/pygments/lexers/text.py +25 -0
- wandb/vendor/pygments/lexers/textedit.py +169 -0
- wandb/vendor/pygments/lexers/textfmts.py +297 -0
- wandb/vendor/pygments/lexers/theorem.py +458 -0
- wandb/vendor/pygments/lexers/trafficscript.py +54 -0
- wandb/vendor/pygments/lexers/typoscript.py +226 -0
- wandb/vendor/pygments/lexers/urbi.py +133 -0
- wandb/vendor/pygments/lexers/varnish.py +190 -0
- wandb/vendor/pygments/lexers/verification.py +111 -0
- wandb/vendor/pygments/lexers/web.py +24 -0
- wandb/vendor/pygments/lexers/webmisc.py +988 -0
- wandb/vendor/pygments/lexers/whiley.py +116 -0
- wandb/vendor/pygments/lexers/x10.py +69 -0
- wandb/vendor/pygments/modeline.py +44 -0
- wandb/vendor/pygments/plugin.py +68 -0
- wandb/vendor/pygments/regexopt.py +92 -0
- wandb/vendor/pygments/scanner.py +105 -0
- wandb/vendor/pygments/sphinxext.py +158 -0
- wandb/vendor/pygments/style.py +155 -0
- wandb/vendor/pygments/styles/__init__.py +80 -0
- wandb/vendor/pygments/styles/abap.py +29 -0
- wandb/vendor/pygments/styles/algol.py +63 -0
- wandb/vendor/pygments/styles/algol_nu.py +63 -0
- wandb/vendor/pygments/styles/arduino.py +98 -0
- wandb/vendor/pygments/styles/autumn.py +65 -0
- wandb/vendor/pygments/styles/borland.py +51 -0
- wandb/vendor/pygments/styles/bw.py +49 -0
- wandb/vendor/pygments/styles/colorful.py +81 -0
- wandb/vendor/pygments/styles/default.py +73 -0
- wandb/vendor/pygments/styles/emacs.py +72 -0
- wandb/vendor/pygments/styles/friendly.py +72 -0
- wandb/vendor/pygments/styles/fruity.py +42 -0
- wandb/vendor/pygments/styles/igor.py +29 -0
- wandb/vendor/pygments/styles/lovelace.py +97 -0
- wandb/vendor/pygments/styles/manni.py +75 -0
- wandb/vendor/pygments/styles/monokai.py +106 -0
- wandb/vendor/pygments/styles/murphy.py +80 -0
- wandb/vendor/pygments/styles/native.py +65 -0
- wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
- wandb/vendor/pygments/styles/paraiso_light.py +125 -0
- wandb/vendor/pygments/styles/pastie.py +75 -0
- wandb/vendor/pygments/styles/perldoc.py +69 -0
- wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
- wandb/vendor/pygments/styles/rrt.py +33 -0
- wandb/vendor/pygments/styles/sas.py +44 -0
- wandb/vendor/pygments/styles/stata.py +40 -0
- wandb/vendor/pygments/styles/tango.py +141 -0
- wandb/vendor/pygments/styles/trac.py +63 -0
- wandb/vendor/pygments/styles/vim.py +63 -0
- wandb/vendor/pygments/styles/vs.py +38 -0
- wandb/vendor/pygments/styles/xcode.py +51 -0
- wandb/vendor/pygments/token.py +213 -0
- wandb/vendor/pygments/unistring.py +217 -0
- wandb/vendor/pygments/util.py +388 -0
- wandb/vendor/pynvml/__init__.py +0 -0
- wandb/vendor/pynvml/pynvml.py +4779 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
- wandb/wandb_agent.py +588 -0
- wandb/wandb_controller.py +721 -0
- wandb/wandb_run.py +9 -0
- wandb-0.18.2.dist-info/METADATA +213 -0
- wandb-0.18.2.dist-info/RECORD +827 -0
- wandb-0.18.2.dist-info/WHEEL +5 -0
- wandb-0.18.2.dist-info/entry_points.txt +3 -0
- wandb-0.18.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,914 @@
|
|
1
|
+
"""Public API: runs."""
|
2
|
+
|
3
|
+
import json
|
4
|
+
import os
|
5
|
+
import sys
|
6
|
+
import tempfile
|
7
|
+
import time
|
8
|
+
import urllib
|
9
|
+
from typing import TYPE_CHECKING, Any, Collection, Dict, List, Mapping, Optional
|
10
|
+
|
11
|
+
if sys.version_info >= (3, 8):
|
12
|
+
from typing import Literal
|
13
|
+
else:
|
14
|
+
from typing_extensions import Literal
|
15
|
+
|
16
|
+
from wandb_gql import gql
|
17
|
+
|
18
|
+
import wandb
|
19
|
+
from wandb import env, util
|
20
|
+
from wandb.apis import public
|
21
|
+
from wandb.apis.attrs import Attrs
|
22
|
+
from wandb.apis.internal import Api as InternalApi
|
23
|
+
from wandb.apis.normalize import normalize_exceptions
|
24
|
+
from wandb.apis.paginator import Paginator
|
25
|
+
from wandb.apis.public.const import RETRY_TIMEDELTA
|
26
|
+
from wandb.sdk.lib import ipython, json_util, runid
|
27
|
+
from wandb.sdk.lib.paths import LogicalPath
|
28
|
+
|
29
|
+
if TYPE_CHECKING:
|
30
|
+
from wandb.apis.public import RetryingClient
|
31
|
+
|
32
|
+
WANDB_INTERNAL_KEYS = {"_wandb", "wandb_version"}
|
33
|
+
|
34
|
+
RUN_FRAGMENT = """fragment RunFragment on Run {
|
35
|
+
id
|
36
|
+
tags
|
37
|
+
name
|
38
|
+
displayName
|
39
|
+
sweepName
|
40
|
+
state
|
41
|
+
config
|
42
|
+
group
|
43
|
+
jobType
|
44
|
+
commit
|
45
|
+
readOnly
|
46
|
+
createdAt
|
47
|
+
heartbeatAt
|
48
|
+
description
|
49
|
+
notes
|
50
|
+
systemMetrics
|
51
|
+
summaryMetrics
|
52
|
+
historyLineCount
|
53
|
+
user {
|
54
|
+
name
|
55
|
+
username
|
56
|
+
}
|
57
|
+
historyKeys
|
58
|
+
}"""
|
59
|
+
|
60
|
+
|
61
|
+
class Runs(Paginator):
|
62
|
+
"""An iterable collection of runs associated with a project and optional filter.
|
63
|
+
|
64
|
+
This is generally used indirectly via the `Api`.runs method.
|
65
|
+
"""
|
66
|
+
|
67
|
+
QUERY = gql(
|
68
|
+
"""
|
69
|
+
query Runs($project: String!, $entity: String!, $cursor: String, $perPage: Int = 50, $order: String, $filters: JSONString) {{
|
70
|
+
project(name: $project, entityName: $entity) {{
|
71
|
+
runCount(filters: $filters)
|
72
|
+
readOnly
|
73
|
+
runs(filters: $filters, after: $cursor, first: $perPage, order: $order) {{
|
74
|
+
edges {{
|
75
|
+
node {{
|
76
|
+
...RunFragment
|
77
|
+
}}
|
78
|
+
cursor
|
79
|
+
}}
|
80
|
+
pageInfo {{
|
81
|
+
endCursor
|
82
|
+
hasNextPage
|
83
|
+
}}
|
84
|
+
}}
|
85
|
+
}}
|
86
|
+
}}
|
87
|
+
{}
|
88
|
+
""".format(RUN_FRAGMENT)
|
89
|
+
)
|
90
|
+
|
91
|
+
def __init__(
|
92
|
+
self,
|
93
|
+
client: "RetryingClient",
|
94
|
+
entity: str,
|
95
|
+
project: str,
|
96
|
+
filters: Optional[Dict[str, Any]] = None,
|
97
|
+
order: Optional[str] = None,
|
98
|
+
per_page: int = 50,
|
99
|
+
include_sweeps: bool = True,
|
100
|
+
):
|
101
|
+
self.entity = entity
|
102
|
+
self.project = project
|
103
|
+
self.filters = filters or {}
|
104
|
+
self.order = order
|
105
|
+
self._sweeps = {}
|
106
|
+
self._include_sweeps = include_sweeps
|
107
|
+
variables = {
|
108
|
+
"project": self.project,
|
109
|
+
"entity": self.entity,
|
110
|
+
"order": self.order,
|
111
|
+
"filters": json.dumps(self.filters),
|
112
|
+
}
|
113
|
+
super().__init__(client, variables, per_page)
|
114
|
+
|
115
|
+
@property
|
116
|
+
def length(self):
|
117
|
+
if self.last_response:
|
118
|
+
return self.last_response["project"]["runCount"]
|
119
|
+
else:
|
120
|
+
return None
|
121
|
+
|
122
|
+
@property
|
123
|
+
def more(self):
|
124
|
+
if self.last_response:
|
125
|
+
return self.last_response["project"]["runs"]["pageInfo"]["hasNextPage"]
|
126
|
+
else:
|
127
|
+
return True
|
128
|
+
|
129
|
+
@property
|
130
|
+
def cursor(self):
|
131
|
+
if self.last_response:
|
132
|
+
return self.last_response["project"]["runs"]["edges"][-1]["cursor"]
|
133
|
+
else:
|
134
|
+
return None
|
135
|
+
|
136
|
+
def convert_objects(self):
|
137
|
+
objs = []
|
138
|
+
if self.last_response is None or self.last_response.get("project") is None:
|
139
|
+
raise ValueError("Could not find project {}".format(self.project))
|
140
|
+
for run_response in self.last_response["project"]["runs"]["edges"]:
|
141
|
+
run = Run(
|
142
|
+
self.client,
|
143
|
+
self.entity,
|
144
|
+
self.project,
|
145
|
+
run_response["node"]["name"],
|
146
|
+
run_response["node"],
|
147
|
+
include_sweeps=self._include_sweeps,
|
148
|
+
)
|
149
|
+
objs.append(run)
|
150
|
+
|
151
|
+
if self._include_sweeps and run.sweep_name:
|
152
|
+
if run.sweep_name in self._sweeps:
|
153
|
+
sweep = self._sweeps[run.sweep_name]
|
154
|
+
else:
|
155
|
+
sweep = public.Sweep.get(
|
156
|
+
self.client,
|
157
|
+
self.entity,
|
158
|
+
self.project,
|
159
|
+
run.sweep_name,
|
160
|
+
withRuns=False,
|
161
|
+
)
|
162
|
+
self._sweeps[run.sweep_name] = sweep
|
163
|
+
|
164
|
+
if sweep is None:
|
165
|
+
continue
|
166
|
+
run.sweep = sweep
|
167
|
+
|
168
|
+
return objs
|
169
|
+
|
170
|
+
@normalize_exceptions
|
171
|
+
def histories(
|
172
|
+
self,
|
173
|
+
samples: int = 500,
|
174
|
+
keys: Optional[List[str]] = None,
|
175
|
+
x_axis: str = "_step",
|
176
|
+
format: Literal["default", "pandas", "polars"] = "default",
|
177
|
+
stream: Literal["default", "system"] = "default",
|
178
|
+
):
|
179
|
+
"""Return sampled history metrics for all runs that fit the filters conditions.
|
180
|
+
|
181
|
+
Arguments:
|
182
|
+
samples : (int, optional) The number of samples to return per run
|
183
|
+
keys : (list[str], optional) Only return metrics for specific keys
|
184
|
+
x_axis : (str, optional) Use this metric as the xAxis defaults to _step
|
185
|
+
format : (Literal, optional) Format to return data in, options are "default", "pandas", "polars"
|
186
|
+
stream : (Literal, optional) "default" for metrics, "system" for machine metrics
|
187
|
+
Returns:
|
188
|
+
pandas.DataFrame: If format="pandas", returns a `pandas.DataFrame` of history metrics.
|
189
|
+
polars.DataFrame: If format="polars", returns a `polars.DataFrame` of history metrics.
|
190
|
+
list of dicts: If format="default", returns a list of dicts containing history metrics with a run_id key.
|
191
|
+
"""
|
192
|
+
if format not in ("default", "pandas", "polars"):
|
193
|
+
raise ValueError(
|
194
|
+
f"Invalid format: {format}. Must be one of 'default', 'pandas', 'polars'"
|
195
|
+
)
|
196
|
+
|
197
|
+
histories = []
|
198
|
+
|
199
|
+
if format == "default":
|
200
|
+
for run in self:
|
201
|
+
history_data = run.history(
|
202
|
+
samples=samples,
|
203
|
+
keys=keys,
|
204
|
+
x_axis=x_axis,
|
205
|
+
pandas=False,
|
206
|
+
stream=stream,
|
207
|
+
)
|
208
|
+
if not history_data:
|
209
|
+
continue
|
210
|
+
for entry in history_data:
|
211
|
+
entry["run_id"] = run.id
|
212
|
+
histories.extend(history_data)
|
213
|
+
|
214
|
+
return histories
|
215
|
+
|
216
|
+
if format == "pandas":
|
217
|
+
pd = util.get_module(
|
218
|
+
"pandas", required="Exporting pandas DataFrame requires pandas"
|
219
|
+
)
|
220
|
+
for run in self:
|
221
|
+
history_data = run.history(
|
222
|
+
samples=samples,
|
223
|
+
keys=keys,
|
224
|
+
x_axis=x_axis,
|
225
|
+
pandas=False,
|
226
|
+
stream=stream,
|
227
|
+
)
|
228
|
+
if not history_data:
|
229
|
+
continue
|
230
|
+
df = pd.DataFrame.from_records(history_data)
|
231
|
+
df["run_id"] = run.id
|
232
|
+
histories.append(df)
|
233
|
+
if not histories:
|
234
|
+
return pd.DataFrame()
|
235
|
+
combined_df = pd.concat(histories)
|
236
|
+
combined_df.sort_values("run_id", inplace=True)
|
237
|
+
combined_df.reset_index(drop=True, inplace=True)
|
238
|
+
# sort columns for consistency
|
239
|
+
combined_df = combined_df[(sorted(combined_df.columns))]
|
240
|
+
|
241
|
+
return combined_df
|
242
|
+
|
243
|
+
if format == "polars":
|
244
|
+
pl = util.get_module(
|
245
|
+
"polars", required="Exporting polars DataFrame requires polars"
|
246
|
+
)
|
247
|
+
for run in self:
|
248
|
+
history_data = run.history(
|
249
|
+
samples=samples,
|
250
|
+
keys=keys,
|
251
|
+
x_axis=x_axis,
|
252
|
+
pandas=False,
|
253
|
+
stream=stream,
|
254
|
+
)
|
255
|
+
if not history_data:
|
256
|
+
continue
|
257
|
+
df = pl.from_records(history_data)
|
258
|
+
df = df.with_columns(pl.lit(run.id).alias("run_id"))
|
259
|
+
histories.append(df)
|
260
|
+
if not histories:
|
261
|
+
return pl.DataFrame()
|
262
|
+
combined_df = pl.concat(histories, how="align")
|
263
|
+
# sort columns for consistency
|
264
|
+
combined_df = combined_df.select(sorted(combined_df.columns)).sort("run_id")
|
265
|
+
|
266
|
+
return combined_df
|
267
|
+
|
268
|
+
def __repr__(self):
|
269
|
+
return f"<Runs {self.entity}/{self.project}>"
|
270
|
+
|
271
|
+
|
272
|
+
class Run(Attrs):
|
273
|
+
"""A single run associated with an entity and project.
|
274
|
+
|
275
|
+
Attributes:
|
276
|
+
tags ([str]): a list of tags associated with the run
|
277
|
+
url (str): the url of this run
|
278
|
+
id (str): unique identifier for the run (defaults to eight characters)
|
279
|
+
name (str): the name of the run
|
280
|
+
state (str): one of: running, finished, crashed, killed, preempting, preempted
|
281
|
+
config (dict): a dict of hyperparameters associated with the run
|
282
|
+
created_at (str): ISO timestamp when the run was started
|
283
|
+
system_metrics (dict): the latest system metrics recorded for the run
|
284
|
+
summary (dict): A mutable dict-like property that holds the current summary.
|
285
|
+
Calling update will persist any changes.
|
286
|
+
project (str): the project associated with the run
|
287
|
+
entity (str): the name of the entity associated with the run
|
288
|
+
user (str): the name of the user who created the run
|
289
|
+
path (str): Unique identifier [entity]/[project]/[run_id]
|
290
|
+
notes (str): Notes about the run
|
291
|
+
read_only (boolean): Whether the run is editable
|
292
|
+
history_keys (str): Keys of the history metrics that have been logged
|
293
|
+
with `wandb.log({key: value})`
|
294
|
+
metadata (str): Metadata about the run from wandb-metadata.json
|
295
|
+
"""
|
296
|
+
|
297
|
+
def __init__(
|
298
|
+
self,
|
299
|
+
client: "RetryingClient",
|
300
|
+
entity: str,
|
301
|
+
project: str,
|
302
|
+
run_id: str,
|
303
|
+
attrs: Optional[Mapping] = None,
|
304
|
+
include_sweeps: bool = True,
|
305
|
+
):
|
306
|
+
"""Initialize a Run object.
|
307
|
+
|
308
|
+
Run is always initialized by calling api.runs() where api is an instance of
|
309
|
+
wandb.Api.
|
310
|
+
"""
|
311
|
+
_attrs = attrs or {}
|
312
|
+
super().__init__(dict(_attrs))
|
313
|
+
self.client = client
|
314
|
+
self._entity = entity
|
315
|
+
self.project = project
|
316
|
+
self._files = {}
|
317
|
+
self._base_dir = env.get_dir(tempfile.gettempdir())
|
318
|
+
self.id = run_id
|
319
|
+
self.sweep = None
|
320
|
+
self._include_sweeps = include_sweeps
|
321
|
+
self.dir = os.path.join(self._base_dir, *self.path)
|
322
|
+
try:
|
323
|
+
os.makedirs(self.dir)
|
324
|
+
except OSError:
|
325
|
+
pass
|
326
|
+
self._summary = None
|
327
|
+
self._metadata: Optional[Dict[str, Any]] = None
|
328
|
+
self._state = _attrs.get("state", "not found")
|
329
|
+
|
330
|
+
self.load(force=not _attrs)
|
331
|
+
|
332
|
+
@property
|
333
|
+
def state(self):
|
334
|
+
return self._state
|
335
|
+
|
336
|
+
@property
|
337
|
+
def entity(self):
|
338
|
+
return self._entity
|
339
|
+
|
340
|
+
@property
|
341
|
+
def username(self):
|
342
|
+
wandb.termwarn("Run.username is deprecated. Please use Run.entity instead.")
|
343
|
+
return self._entity
|
344
|
+
|
345
|
+
@property
|
346
|
+
def storage_id(self):
|
347
|
+
# For compatibility with wandb.Run, which has storage IDs
|
348
|
+
# in self.storage_id and names in self.id.
|
349
|
+
|
350
|
+
return self._attrs.get("id")
|
351
|
+
|
352
|
+
@property
|
353
|
+
def id(self):
|
354
|
+
return self._attrs.get("name")
|
355
|
+
|
356
|
+
@id.setter
|
357
|
+
def id(self, new_id):
|
358
|
+
attrs = self._attrs
|
359
|
+
attrs["name"] = new_id
|
360
|
+
return new_id
|
361
|
+
|
362
|
+
@property
|
363
|
+
def name(self):
|
364
|
+
return self._attrs.get("displayName")
|
365
|
+
|
366
|
+
@name.setter
|
367
|
+
def name(self, new_name):
|
368
|
+
self._attrs["displayName"] = new_name
|
369
|
+
return new_name
|
370
|
+
|
371
|
+
@classmethod
|
372
|
+
def create(cls, api, run_id=None, project=None, entity=None):
|
373
|
+
"""Create a run for the given project."""
|
374
|
+
run_id = run_id or runid.generate_id()
|
375
|
+
project = project or api.settings.get("project") or "uncategorized"
|
376
|
+
mutation = gql(
|
377
|
+
"""
|
378
|
+
mutation UpsertBucket($project: String, $entity: String, $name: String!) {
|
379
|
+
upsertBucket(input: {modelName: $project, entityName: $entity, name: $name}) {
|
380
|
+
bucket {
|
381
|
+
project {
|
382
|
+
name
|
383
|
+
entity { name }
|
384
|
+
}
|
385
|
+
id
|
386
|
+
name
|
387
|
+
}
|
388
|
+
inserted
|
389
|
+
}
|
390
|
+
}
|
391
|
+
"""
|
392
|
+
)
|
393
|
+
variables = {"entity": entity, "project": project, "name": run_id}
|
394
|
+
res = api.client.execute(mutation, variable_values=variables)
|
395
|
+
res = res["upsertBucket"]["bucket"]
|
396
|
+
return Run(
|
397
|
+
api.client,
|
398
|
+
res["project"]["entity"]["name"],
|
399
|
+
res["project"]["name"],
|
400
|
+
res["name"],
|
401
|
+
{
|
402
|
+
"id": res["id"],
|
403
|
+
"config": "{}",
|
404
|
+
"systemMetrics": "{}",
|
405
|
+
"summaryMetrics": "{}",
|
406
|
+
"tags": [],
|
407
|
+
"description": None,
|
408
|
+
"notes": None,
|
409
|
+
"state": "running",
|
410
|
+
},
|
411
|
+
)
|
412
|
+
|
413
|
+
def load(self, force=False):
|
414
|
+
query = gql(
|
415
|
+
"""
|
416
|
+
query Run($project: String!, $entity: String!, $name: String!) {{
|
417
|
+
project(name: $project, entityName: $entity) {{
|
418
|
+
run(name: $name) {{
|
419
|
+
...RunFragment
|
420
|
+
}}
|
421
|
+
}}
|
422
|
+
}}
|
423
|
+
{}
|
424
|
+
""".format(RUN_FRAGMENT)
|
425
|
+
)
|
426
|
+
if force or not self._attrs:
|
427
|
+
response = self._exec(query)
|
428
|
+
if (
|
429
|
+
response is None
|
430
|
+
or response.get("project") is None
|
431
|
+
or response["project"].get("run") is None
|
432
|
+
):
|
433
|
+
raise ValueError("Could not find run {}".format(self))
|
434
|
+
self._attrs = response["project"]["run"]
|
435
|
+
self._state = self._attrs["state"]
|
436
|
+
|
437
|
+
if self._include_sweeps and self.sweep_name and not self.sweep:
|
438
|
+
# There may be a lot of runs. Don't bother pulling them all
|
439
|
+
# just for the sake of this one.
|
440
|
+
self.sweep = public.Sweep.get(
|
441
|
+
self.client,
|
442
|
+
self.entity,
|
443
|
+
self.project,
|
444
|
+
self.sweep_name,
|
445
|
+
withRuns=False,
|
446
|
+
)
|
447
|
+
|
448
|
+
try:
|
449
|
+
self._attrs["summaryMetrics"] = (
|
450
|
+
json.loads(self._attrs["summaryMetrics"])
|
451
|
+
if self._attrs.get("summaryMetrics")
|
452
|
+
else {}
|
453
|
+
)
|
454
|
+
except json.decoder.JSONDecodeError:
|
455
|
+
# ignore invalid utf-8 or control characters
|
456
|
+
self._attrs["summaryMetrics"] = json.loads(
|
457
|
+
self._attrs["summaryMetrics"],
|
458
|
+
strict=False,
|
459
|
+
)
|
460
|
+
self._attrs["systemMetrics"] = (
|
461
|
+
json.loads(self._attrs["systemMetrics"])
|
462
|
+
if self._attrs.get("systemMetrics")
|
463
|
+
else {}
|
464
|
+
)
|
465
|
+
if self._attrs.get("user"):
|
466
|
+
self.user = public.User(self.client, self._attrs["user"])
|
467
|
+
config_user, config_raw = {}, {}
|
468
|
+
for key, value in json.loads(self._attrs.get("config") or "{}").items():
|
469
|
+
config = config_raw if key in WANDB_INTERNAL_KEYS else config_user
|
470
|
+
if isinstance(value, dict) and "value" in value:
|
471
|
+
config[key] = value["value"]
|
472
|
+
else:
|
473
|
+
config[key] = value
|
474
|
+
config_raw.update(config_user)
|
475
|
+
self._attrs["config"] = config_user
|
476
|
+
self._attrs["rawconfig"] = config_raw
|
477
|
+
return self._attrs
|
478
|
+
|
479
|
+
@normalize_exceptions
|
480
|
+
def wait_until_finished(self):
|
481
|
+
query = gql(
|
482
|
+
"""
|
483
|
+
query RunState($project: String!, $entity: String!, $name: String!) {
|
484
|
+
project(name: $project, entityName: $entity) {
|
485
|
+
run(name: $name) {
|
486
|
+
state
|
487
|
+
}
|
488
|
+
}
|
489
|
+
}
|
490
|
+
"""
|
491
|
+
)
|
492
|
+
while True:
|
493
|
+
res = self._exec(query)
|
494
|
+
state = res["project"]["run"]["state"]
|
495
|
+
if state in ["finished", "crashed", "failed"]:
|
496
|
+
print(f"Run finished with status: {state}")
|
497
|
+
self._attrs["state"] = state
|
498
|
+
self._state = state
|
499
|
+
return
|
500
|
+
time.sleep(5)
|
501
|
+
|
502
|
+
@normalize_exceptions
|
503
|
+
def update(self):
|
504
|
+
"""Persist changes to the run object to the wandb backend."""
|
505
|
+
mutation = gql(
|
506
|
+
"""
|
507
|
+
mutation UpsertBucket($id: String!, $description: String, $display_name: String, $notes: String, $tags: [String!], $config: JSONString!, $groupName: String) {{
|
508
|
+
upsertBucket(input: {{id: $id, description: $description, displayName: $display_name, notes: $notes, tags: $tags, config: $config, groupName: $groupName}}) {{
|
509
|
+
bucket {{
|
510
|
+
...RunFragment
|
511
|
+
}}
|
512
|
+
}}
|
513
|
+
}}
|
514
|
+
{}
|
515
|
+
""".format(RUN_FRAGMENT)
|
516
|
+
)
|
517
|
+
_ = self._exec(
|
518
|
+
mutation,
|
519
|
+
id=self.storage_id,
|
520
|
+
tags=self.tags,
|
521
|
+
description=self.description,
|
522
|
+
notes=self.notes,
|
523
|
+
display_name=self.display_name,
|
524
|
+
config=self.json_config,
|
525
|
+
groupName=self.group,
|
526
|
+
)
|
527
|
+
self.summary.update()
|
528
|
+
|
529
|
+
@normalize_exceptions
|
530
|
+
def delete(self, delete_artifacts=False):
|
531
|
+
"""Delete the given run from the wandb backend."""
|
532
|
+
mutation = gql(
|
533
|
+
"""
|
534
|
+
mutation DeleteRun(
|
535
|
+
$id: ID!,
|
536
|
+
{}
|
537
|
+
) {{
|
538
|
+
deleteRun(input: {{
|
539
|
+
id: $id,
|
540
|
+
{}
|
541
|
+
}}) {{
|
542
|
+
clientMutationId
|
543
|
+
}}
|
544
|
+
}}
|
545
|
+
""".format(
|
546
|
+
"$deleteArtifacts: Boolean" if delete_artifacts else "",
|
547
|
+
"deleteArtifacts: $deleteArtifacts" if delete_artifacts else "",
|
548
|
+
)
|
549
|
+
)
|
550
|
+
|
551
|
+
self.client.execute(
|
552
|
+
mutation,
|
553
|
+
variable_values={
|
554
|
+
"id": self.storage_id,
|
555
|
+
"deleteArtifacts": delete_artifacts,
|
556
|
+
},
|
557
|
+
)
|
558
|
+
|
559
|
+
def save(self):
|
560
|
+
self.update()
|
561
|
+
|
562
|
+
@property
|
563
|
+
def json_config(self):
|
564
|
+
config = {}
|
565
|
+
if "_wandb" in self.rawconfig:
|
566
|
+
config["_wandb"] = {"value": self.rawconfig["_wandb"], "desc": None}
|
567
|
+
for k, v in self.config.items():
|
568
|
+
config[k] = {"value": v, "desc": None}
|
569
|
+
return json.dumps(config)
|
570
|
+
|
571
|
+
def _exec(self, query, **kwargs):
|
572
|
+
"""Execute a query against the cloud backend."""
|
573
|
+
variables = {"entity": self.entity, "project": self.project, "name": self.id}
|
574
|
+
variables.update(kwargs)
|
575
|
+
return self.client.execute(query, variable_values=variables)
|
576
|
+
|
577
|
+
def _sampled_history(self, keys, x_axis="_step", samples=500):
|
578
|
+
spec = {"keys": [x_axis] + keys, "samples": samples}
|
579
|
+
query = gql(
|
580
|
+
"""
|
581
|
+
query RunSampledHistory($project: String!, $entity: String!, $name: String!, $specs: [JSONString!]!) {
|
582
|
+
project(name: $project, entityName: $entity) {
|
583
|
+
run(name: $name) { sampledHistory(specs: $specs) }
|
584
|
+
}
|
585
|
+
}
|
586
|
+
"""
|
587
|
+
)
|
588
|
+
|
589
|
+
response = self._exec(query, specs=[json.dumps(spec)])
|
590
|
+
# sampledHistory returns one list per spec, we only send one spec
|
591
|
+
return response["project"]["run"]["sampledHistory"][0]
|
592
|
+
|
593
|
+
def _full_history(self, samples=500, stream="default"):
|
594
|
+
node = "history" if stream == "default" else "events"
|
595
|
+
query = gql(
|
596
|
+
"""
|
597
|
+
query RunFullHistory($project: String!, $entity: String!, $name: String!, $samples: Int) {{
|
598
|
+
project(name: $project, entityName: $entity) {{
|
599
|
+
run(name: $name) {{ {}(samples: $samples) }}
|
600
|
+
}}
|
601
|
+
}}
|
602
|
+
""".format(node)
|
603
|
+
)
|
604
|
+
|
605
|
+
response = self._exec(query, samples=samples)
|
606
|
+
return [json.loads(line) for line in response["project"]["run"][node]]
|
607
|
+
|
608
|
+
@normalize_exceptions
|
609
|
+
def files(self, names=None, per_page=50):
|
610
|
+
"""Return a file path for each file named.
|
611
|
+
|
612
|
+
Arguments:
|
613
|
+
names (list): names of the requested files, if empty returns all files
|
614
|
+
per_page (int): number of results per page.
|
615
|
+
|
616
|
+
Returns:
|
617
|
+
A `Files` object, which is an iterator over `File` objects.
|
618
|
+
"""
|
619
|
+
return public.Files(self.client, self, names or [], per_page)
|
620
|
+
|
621
|
+
@normalize_exceptions
|
622
|
+
def file(self, name):
|
623
|
+
"""Return the path of a file with a given name in the artifact.
|
624
|
+
|
625
|
+
Arguments:
|
626
|
+
name (str): name of requested file.
|
627
|
+
|
628
|
+
Returns:
|
629
|
+
A `File` matching the name argument.
|
630
|
+
"""
|
631
|
+
return public.Files(self.client, self, [name])[0]
|
632
|
+
|
633
|
+
@normalize_exceptions
|
634
|
+
def upload_file(self, path, root="."):
|
635
|
+
"""Upload a file.
|
636
|
+
|
637
|
+
Arguments:
|
638
|
+
path (str): name of file to upload.
|
639
|
+
root (str): the root path to save the file relative to. i.e.
|
640
|
+
If you want to have the file saved in the run as "my_dir/file.txt"
|
641
|
+
and you're currently in "my_dir" you would set root to "../".
|
642
|
+
|
643
|
+
Returns:
|
644
|
+
A `File` matching the name argument.
|
645
|
+
"""
|
646
|
+
api = InternalApi(
|
647
|
+
default_settings={"entity": self.entity, "project": self.project},
|
648
|
+
retry_timedelta=RETRY_TIMEDELTA,
|
649
|
+
)
|
650
|
+
api.set_current_run_id(self.id)
|
651
|
+
root = os.path.abspath(root)
|
652
|
+
name = os.path.relpath(path, root)
|
653
|
+
with open(os.path.join(root, name), "rb") as f:
|
654
|
+
api.push({LogicalPath(name): f})
|
655
|
+
return public.Files(self.client, self, [name])[0]
|
656
|
+
|
657
|
+
@normalize_exceptions
|
658
|
+
def history(
|
659
|
+
self, samples=500, keys=None, x_axis="_step", pandas=True, stream="default"
|
660
|
+
):
|
661
|
+
"""Return sampled history metrics for a run.
|
662
|
+
|
663
|
+
This is simpler and faster if you are ok with the history records being sampled.
|
664
|
+
|
665
|
+
Arguments:
|
666
|
+
samples : (int, optional) The number of samples to return
|
667
|
+
pandas : (bool, optional) Return a pandas dataframe
|
668
|
+
keys : (list, optional) Only return metrics for specific keys
|
669
|
+
x_axis : (str, optional) Use this metric as the xAxis defaults to _step
|
670
|
+
stream : (str, optional) "default" for metrics, "system" for machine metrics
|
671
|
+
|
672
|
+
Returns:
|
673
|
+
pandas.DataFrame: If pandas=True returns a `pandas.DataFrame` of history
|
674
|
+
metrics.
|
675
|
+
list of dicts: If pandas=False returns a list of dicts of history metrics.
|
676
|
+
"""
|
677
|
+
if keys is not None and not isinstance(keys, list):
|
678
|
+
wandb.termerror("keys must be specified in a list")
|
679
|
+
return []
|
680
|
+
if keys is not None and len(keys) > 0 and not isinstance(keys[0], str):
|
681
|
+
wandb.termerror("keys argument must be a list of strings")
|
682
|
+
return []
|
683
|
+
|
684
|
+
if keys and stream != "default":
|
685
|
+
wandb.termerror("stream must be default when specifying keys")
|
686
|
+
return []
|
687
|
+
elif keys:
|
688
|
+
lines = self._sampled_history(keys=keys, x_axis=x_axis, samples=samples)
|
689
|
+
else:
|
690
|
+
lines = self._full_history(samples=samples, stream=stream)
|
691
|
+
if pandas:
|
692
|
+
pd = util.get_module("pandas")
|
693
|
+
if pd:
|
694
|
+
lines = pd.DataFrame.from_records(lines)
|
695
|
+
else:
|
696
|
+
print("Unable to load pandas, call history with pandas=False")
|
697
|
+
return lines
|
698
|
+
|
699
|
+
@normalize_exceptions
|
700
|
+
def scan_history(self, keys=None, page_size=1000, min_step=None, max_step=None):
|
701
|
+
"""Returns an iterable collection of all history records for a run.
|
702
|
+
|
703
|
+
Example:
|
704
|
+
Export all the loss values for an example run
|
705
|
+
|
706
|
+
```python
|
707
|
+
run = api.run("l2k2/examples-numpy-boston/i0wt6xua")
|
708
|
+
history = run.scan_history(keys=["Loss"])
|
709
|
+
losses = [row["Loss"] for row in history]
|
710
|
+
```
|
711
|
+
|
712
|
+
Arguments:
|
713
|
+
keys ([str], optional): only fetch these keys, and only fetch rows that have all of keys defined.
|
714
|
+
page_size (int, optional): size of pages to fetch from the api.
|
715
|
+
min_step (int, optional): the minimum number of pages to scan at a time.
|
716
|
+
max_step (int, optional): the maximum number of pages to scan at a time.
|
717
|
+
|
718
|
+
Returns:
|
719
|
+
An iterable collection over history records (dict).
|
720
|
+
"""
|
721
|
+
if keys is not None and not isinstance(keys, list):
|
722
|
+
wandb.termerror("keys must be specified in a list")
|
723
|
+
return []
|
724
|
+
if keys is not None and len(keys) > 0 and not isinstance(keys[0], str):
|
725
|
+
wandb.termerror("keys argument must be a list of strings")
|
726
|
+
return []
|
727
|
+
|
728
|
+
last_step = self.lastHistoryStep
|
729
|
+
# set defaults for min/max step
|
730
|
+
if min_step is None:
|
731
|
+
min_step = 0
|
732
|
+
if max_step is None:
|
733
|
+
max_step = last_step + 1
|
734
|
+
# if the max step is past the actual last step, clamp it down
|
735
|
+
if max_step > last_step:
|
736
|
+
max_step = last_step + 1
|
737
|
+
if keys is None:
|
738
|
+
return public.HistoryScan(
|
739
|
+
run=self,
|
740
|
+
client=self.client,
|
741
|
+
page_size=page_size,
|
742
|
+
min_step=min_step,
|
743
|
+
max_step=max_step,
|
744
|
+
)
|
745
|
+
else:
|
746
|
+
return public.SampledHistoryScan(
|
747
|
+
run=self,
|
748
|
+
client=self.client,
|
749
|
+
keys=keys,
|
750
|
+
page_size=page_size,
|
751
|
+
min_step=min_step,
|
752
|
+
max_step=max_step,
|
753
|
+
)
|
754
|
+
|
755
|
+
@normalize_exceptions
|
756
|
+
def logged_artifacts(self, per_page=100):
|
757
|
+
return public.RunArtifacts(self.client, self, mode="logged", per_page=per_page)
|
758
|
+
|
759
|
+
@normalize_exceptions
|
760
|
+
def used_artifacts(self, per_page=100):
|
761
|
+
return public.RunArtifacts(self.client, self, mode="used", per_page=per_page)
|
762
|
+
|
763
|
+
@normalize_exceptions
|
764
|
+
def use_artifact(self, artifact, use_as=None):
|
765
|
+
"""Declare an artifact as an input to a run.
|
766
|
+
|
767
|
+
Arguments:
|
768
|
+
artifact (`Artifact`): An artifact returned from
|
769
|
+
`wandb.Api().artifact(name)`
|
770
|
+
use_as (string, optional): A string identifying
|
771
|
+
how the artifact is used in the script. Used
|
772
|
+
to easily differentiate artifacts used in a
|
773
|
+
run, when using the beta wandb launch
|
774
|
+
feature's artifact swapping functionality.
|
775
|
+
|
776
|
+
Returns:
|
777
|
+
A `Artifact` object.
|
778
|
+
"""
|
779
|
+
api = InternalApi(
|
780
|
+
default_settings={"entity": self.entity, "project": self.project},
|
781
|
+
retry_timedelta=RETRY_TIMEDELTA,
|
782
|
+
)
|
783
|
+
api.set_current_run_id(self.id)
|
784
|
+
|
785
|
+
if isinstance(artifact, wandb.Artifact) and not artifact.is_draft():
|
786
|
+
api.use_artifact(artifact.id, use_as=use_as or artifact.name)
|
787
|
+
return artifact
|
788
|
+
elif isinstance(artifact, wandb.Artifact) and artifact.is_draft():
|
789
|
+
raise ValueError(
|
790
|
+
"Only existing artifacts are accepted by this api. "
|
791
|
+
"Manually create one with `wandb artifact put`"
|
792
|
+
)
|
793
|
+
else:
|
794
|
+
raise ValueError("You must pass a wandb.Api().artifact() to use_artifact")
|
795
|
+
|
796
|
+
@normalize_exceptions
|
797
|
+
def log_artifact(
|
798
|
+
self,
|
799
|
+
artifact: "wandb.Artifact",
|
800
|
+
aliases: Optional[Collection[str]] = None,
|
801
|
+
tags: Optional[Collection[str]] = None,
|
802
|
+
):
|
803
|
+
"""Declare an artifact as output of a run.
|
804
|
+
|
805
|
+
Arguments:
|
806
|
+
artifact (`Artifact`): An artifact returned from
|
807
|
+
`wandb.Api().artifact(name)`.
|
808
|
+
aliases (list, optional): Aliases to apply to this artifact.
|
809
|
+
tags: (list, optional) Tags to apply to this artifact, if any.
|
810
|
+
|
811
|
+
Returns:
|
812
|
+
A `Artifact` object.
|
813
|
+
"""
|
814
|
+
api = InternalApi(
|
815
|
+
default_settings={"entity": self.entity, "project": self.project},
|
816
|
+
retry_timedelta=RETRY_TIMEDELTA,
|
817
|
+
)
|
818
|
+
api.set_current_run_id(self.id)
|
819
|
+
|
820
|
+
if not isinstance(artifact, wandb.Artifact):
|
821
|
+
raise ValueError("You must pass a wandb.Api().artifact() to use_artifact")
|
822
|
+
if artifact.is_draft():
|
823
|
+
raise ValueError(
|
824
|
+
"Only existing artifacts are accepted by this api. "
|
825
|
+
"Manually create one with `wandb artifact put`"
|
826
|
+
)
|
827
|
+
if (
|
828
|
+
self.entity != artifact.source_entity
|
829
|
+
or self.project != artifact.source_project
|
830
|
+
):
|
831
|
+
raise ValueError("A run can't log an artifact to a different project.")
|
832
|
+
|
833
|
+
artifact_collection_name = artifact.source_name.split(":")[0]
|
834
|
+
api.create_artifact(
|
835
|
+
artifact.type,
|
836
|
+
artifact_collection_name,
|
837
|
+
artifact.digest,
|
838
|
+
aliases=aliases,
|
839
|
+
tags=tags,
|
840
|
+
)
|
841
|
+
return artifact
|
842
|
+
|
843
|
+
@property
|
844
|
+
def summary(self):
|
845
|
+
if self._summary is None:
|
846
|
+
from wandb.old.summary import HTTPSummary
|
847
|
+
|
848
|
+
# TODO: fix the outdir issue
|
849
|
+
self._summary = HTTPSummary(self, self.client, summary=self.summary_metrics)
|
850
|
+
return self._summary
|
851
|
+
|
852
|
+
@property
|
853
|
+
def path(self):
|
854
|
+
return [
|
855
|
+
urllib.parse.quote_plus(str(self.entity)),
|
856
|
+
urllib.parse.quote_plus(str(self.project)),
|
857
|
+
urllib.parse.quote_plus(str(self.id)),
|
858
|
+
]
|
859
|
+
|
860
|
+
@property
|
861
|
+
def url(self):
|
862
|
+
path = self.path
|
863
|
+
path.insert(2, "runs")
|
864
|
+
return self.client.app_url + "/".join(path)
|
865
|
+
|
866
|
+
@property
|
867
|
+
def metadata(self):
|
868
|
+
if self._metadata is None:
|
869
|
+
try:
|
870
|
+
f = self.file("wandb-metadata.json")
|
871
|
+
contents = util.download_file_into_memory(f.url, wandb.Api().api_key)
|
872
|
+
self._metadata = json_util.loads(contents)
|
873
|
+
except: # noqa: E722
|
874
|
+
# file doesn't exist, or can't be downloaded, or can't be parsed
|
875
|
+
pass
|
876
|
+
return self._metadata
|
877
|
+
|
878
|
+
@property
|
879
|
+
def lastHistoryStep(self): # noqa: N802
|
880
|
+
query = gql(
|
881
|
+
"""
|
882
|
+
query RunHistoryKeys($project: String!, $entity: String!, $name: String!) {
|
883
|
+
project(name: $project, entityName: $entity) {
|
884
|
+
run(name: $name) { historyKeys }
|
885
|
+
}
|
886
|
+
}
|
887
|
+
"""
|
888
|
+
)
|
889
|
+
response = self._exec(query)
|
890
|
+
if (
|
891
|
+
response is None
|
892
|
+
or response.get("project") is None
|
893
|
+
or response["project"].get("run") is None
|
894
|
+
or response["project"]["run"].get("historyKeys") is None
|
895
|
+
):
|
896
|
+
return -1
|
897
|
+
history_keys = response["project"]["run"]["historyKeys"]
|
898
|
+
return history_keys["lastStep"] if "lastStep" in history_keys else -1
|
899
|
+
|
900
|
+
def to_html(self, height=420, hidden=False):
|
901
|
+
"""Generate HTML containing an iframe displaying this run."""
|
902
|
+
url = self.url + "?jupyter=true"
|
903
|
+
style = f"border:none;width:100%;height:{height}px;"
|
904
|
+
prefix = ""
|
905
|
+
if hidden:
|
906
|
+
style += "display:none;"
|
907
|
+
prefix = ipython.toggle_button()
|
908
|
+
return prefix + f"<iframe src={url!r} style={style!r}></iframe>"
|
909
|
+
|
910
|
+
def _repr_html_(self) -> str:
|
911
|
+
return self.to_html()
|
912
|
+
|
913
|
+
def __repr__(self):
|
914
|
+
return "<Run {} ({})>".format("/".join(self.path), self.state)
|