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
wandb/sdk/wandb_setup.py
ADDED
@@ -0,0 +1,409 @@
|
|
1
|
+
#
|
2
|
+
"""Setup wandb session.
|
3
|
+
|
4
|
+
This module configures a wandb session which can extend to multiple wandb runs.
|
5
|
+
|
6
|
+
Functions:
|
7
|
+
setup(): Configure wandb session.
|
8
|
+
|
9
|
+
Early logging keeps track of logger output until the call to wandb.init() when the
|
10
|
+
run_id can be resolved.
|
11
|
+
|
12
|
+
"""
|
13
|
+
|
14
|
+
import logging
|
15
|
+
import os
|
16
|
+
import sys
|
17
|
+
import threading
|
18
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
19
|
+
|
20
|
+
import wandb
|
21
|
+
from wandb.sdk.lib import import_hooks
|
22
|
+
|
23
|
+
from . import wandb_settings
|
24
|
+
from .lib import config_util, server, tracelog
|
25
|
+
|
26
|
+
Settings = Union["wandb.sdk.wandb_settings.Settings", Dict[str, Any]]
|
27
|
+
|
28
|
+
Logger = Union[logging.Logger, "_EarlyLogger"]
|
29
|
+
|
30
|
+
if TYPE_CHECKING:
|
31
|
+
from wandb.sdk.lib import service_connection
|
32
|
+
|
33
|
+
from . import wandb_run
|
34
|
+
|
35
|
+
# logger will be configured to be either a standard logger instance or _EarlyLogger
|
36
|
+
logger: Optional[Logger] = None
|
37
|
+
|
38
|
+
|
39
|
+
def _set_logger(log_object: Logger) -> None:
|
40
|
+
"""Configure module logger."""
|
41
|
+
global logger
|
42
|
+
logger = log_object
|
43
|
+
|
44
|
+
|
45
|
+
class _EarlyLogger:
|
46
|
+
"""Early logger which captures logs in memory until logging can be configured."""
|
47
|
+
|
48
|
+
def __init__(self) -> None:
|
49
|
+
self._log: List[tuple] = []
|
50
|
+
self._exception: List[tuple] = []
|
51
|
+
# support old warn() as alias of warning()
|
52
|
+
self.warn = self.warning
|
53
|
+
|
54
|
+
def debug(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
55
|
+
self._log.append((logging.DEBUG, msg, args, kwargs))
|
56
|
+
|
57
|
+
def info(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
58
|
+
self._log.append((logging.INFO, msg, args, kwargs))
|
59
|
+
|
60
|
+
def warning(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
61
|
+
self._log.append((logging.WARNING, msg, args, kwargs))
|
62
|
+
|
63
|
+
def error(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
64
|
+
self._log.append((logging.ERROR, msg, args, kwargs))
|
65
|
+
|
66
|
+
def critical(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
67
|
+
self._log.append((logging.CRITICAL, msg, args, kwargs))
|
68
|
+
|
69
|
+
def exception(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
70
|
+
self._exception.append((msg, args, kwargs))
|
71
|
+
|
72
|
+
def log(self, level: str, msg: str, *args: Any, **kwargs: Any) -> None:
|
73
|
+
self._log.append((level, msg, args, kwargs))
|
74
|
+
|
75
|
+
def _flush(self) -> None:
|
76
|
+
assert self is not logger
|
77
|
+
assert logger is not None
|
78
|
+
for level, msg, args, kwargs in self._log:
|
79
|
+
logger.log(level, msg, *args, **kwargs)
|
80
|
+
for msg, args, kwargs in self._exception:
|
81
|
+
logger.exception(msg, *args, **kwargs)
|
82
|
+
|
83
|
+
|
84
|
+
class _WandbSetup__WandbSetup: # noqa: N801
|
85
|
+
"""Inner class of _WandbSetup."""
|
86
|
+
|
87
|
+
def __init__(
|
88
|
+
self,
|
89
|
+
pid: int,
|
90
|
+
settings: Optional[Settings] = None,
|
91
|
+
environ: Optional[Dict[str, Any]] = None,
|
92
|
+
) -> None:
|
93
|
+
self._connection: Optional[service_connection.ServiceConnection] = None
|
94
|
+
|
95
|
+
self._environ = environ or dict(os.environ)
|
96
|
+
self._sweep_config: Optional[Dict[str, Any]] = None
|
97
|
+
self._config: Optional[Dict[str, Any]] = None
|
98
|
+
self._server: Optional[server.Server] = None
|
99
|
+
self._pid = pid
|
100
|
+
|
101
|
+
# keep track of multiple runs, so we can unwind with join()s
|
102
|
+
self._global_run_stack: List[wandb_run.Run] = []
|
103
|
+
|
104
|
+
# TODO(jhr): defer strict checks until settings are fully initialized
|
105
|
+
# and logging is ready
|
106
|
+
self._early_logger = _EarlyLogger()
|
107
|
+
_set_logger(self._early_logger)
|
108
|
+
|
109
|
+
self._settings = self._settings_setup(settings, self._early_logger)
|
110
|
+
# self._settings.freeze()
|
111
|
+
|
112
|
+
wandb.termsetup(self._settings, logger)
|
113
|
+
|
114
|
+
self._check()
|
115
|
+
self._setup()
|
116
|
+
|
117
|
+
tracelog_mode = self._settings._tracelog
|
118
|
+
if tracelog_mode:
|
119
|
+
tracelog.enable(tracelog_mode)
|
120
|
+
|
121
|
+
def _settings_setup(
|
122
|
+
self,
|
123
|
+
settings: Optional[Settings] = None,
|
124
|
+
early_logger: Optional[_EarlyLogger] = None,
|
125
|
+
) -> "wandb_settings.Settings":
|
126
|
+
s = wandb_settings.Settings()
|
127
|
+
s._apply_base(pid=self._pid, _logger=early_logger)
|
128
|
+
s._apply_config_files(_logger=early_logger)
|
129
|
+
s._apply_env_vars(self._environ, _logger=early_logger)
|
130
|
+
|
131
|
+
if isinstance(settings, wandb_settings.Settings):
|
132
|
+
s._apply_settings(settings, _logger=early_logger)
|
133
|
+
elif isinstance(settings, dict):
|
134
|
+
# if passed settings arg is a mapping, update the settings with it
|
135
|
+
s._apply_setup(settings, _logger=early_logger)
|
136
|
+
|
137
|
+
s._infer_settings_from_environment()
|
138
|
+
if not s._cli_only_mode:
|
139
|
+
s._infer_run_settings_from_environment(_logger=early_logger)
|
140
|
+
|
141
|
+
return s
|
142
|
+
|
143
|
+
def _update(
|
144
|
+
self,
|
145
|
+
settings: Optional[Settings] = None,
|
146
|
+
) -> None:
|
147
|
+
if settings is None:
|
148
|
+
return
|
149
|
+
# self._settings.unfreeze()
|
150
|
+
if isinstance(settings, wandb_settings.Settings):
|
151
|
+
# todo: check the logic here. this _only_ comes up in tests?
|
152
|
+
self._settings._apply_settings(settings)
|
153
|
+
elif isinstance(settings, dict):
|
154
|
+
# if it is a mapping, update the settings with it
|
155
|
+
self._settings.update(settings, source=wandb_settings.Source.SETUP)
|
156
|
+
# self._settings.freeze()
|
157
|
+
|
158
|
+
def _update_user_settings(self, settings: Optional[Settings] = None) -> None:
|
159
|
+
settings = settings or self._settings
|
160
|
+
# Get rid of cached results to force a refresh.
|
161
|
+
self._server = None
|
162
|
+
user_settings = self._load_user_settings(settings=settings)
|
163
|
+
if user_settings is not None:
|
164
|
+
# self._settings.unfreeze()
|
165
|
+
self._settings._apply_user(user_settings)
|
166
|
+
# self._settings.freeze()
|
167
|
+
|
168
|
+
def _early_logger_flush(self, new_logger: Logger) -> None:
|
169
|
+
if not self._early_logger:
|
170
|
+
return
|
171
|
+
_set_logger(new_logger)
|
172
|
+
# self._settings._clear_early_logger()
|
173
|
+
self._early_logger._flush()
|
174
|
+
|
175
|
+
def _get_logger(self) -> Optional[Logger]:
|
176
|
+
return logger
|
177
|
+
|
178
|
+
@property
|
179
|
+
def settings(self) -> "wandb_settings.Settings":
|
180
|
+
return self._settings
|
181
|
+
|
182
|
+
def _get_entity(self) -> Optional[str]:
|
183
|
+
if self._settings and self._settings._offline:
|
184
|
+
return None
|
185
|
+
if self._server is None:
|
186
|
+
self._load_viewer()
|
187
|
+
assert self._server is not None
|
188
|
+
entity = self._server._viewer.get("entity")
|
189
|
+
return entity
|
190
|
+
|
191
|
+
def _get_username(self) -> Optional[str]:
|
192
|
+
if self._settings and self._settings._offline:
|
193
|
+
return None
|
194
|
+
if self._server is None:
|
195
|
+
self._load_viewer()
|
196
|
+
assert self._server is not None
|
197
|
+
username = self._server._viewer.get("username")
|
198
|
+
return username
|
199
|
+
|
200
|
+
def _get_teams(self) -> List[str]:
|
201
|
+
if self._settings and self._settings._offline:
|
202
|
+
return []
|
203
|
+
if self._server is None:
|
204
|
+
self._load_viewer()
|
205
|
+
assert self._server is not None
|
206
|
+
teams = self._server._viewer.get("teams")
|
207
|
+
if teams:
|
208
|
+
teams = [team["node"]["name"] for team in teams["edges"]]
|
209
|
+
return teams or []
|
210
|
+
|
211
|
+
def _load_viewer(self, settings: Optional[Settings] = None) -> None:
|
212
|
+
if self._settings and self._settings._offline:
|
213
|
+
return
|
214
|
+
if isinstance(settings, dict):
|
215
|
+
settings = wandb_settings.Settings(**settings)
|
216
|
+
s = server.Server(settings=settings)
|
217
|
+
s.query_with_timeout()
|
218
|
+
self._server = s
|
219
|
+
|
220
|
+
def _load_user_settings(
|
221
|
+
self, settings: Optional[Settings] = None
|
222
|
+
) -> Optional[Dict[str, Any]]:
|
223
|
+
if self._server is None:
|
224
|
+
self._load_viewer(settings=settings)
|
225
|
+
|
226
|
+
# offline?
|
227
|
+
if self._server is None:
|
228
|
+
return None
|
229
|
+
|
230
|
+
flags = self._server._flags
|
231
|
+
user_settings = dict()
|
232
|
+
if "code_saving_enabled" in flags:
|
233
|
+
user_settings["save_code"] = flags["code_saving_enabled"]
|
234
|
+
|
235
|
+
email = self._server._viewer.get("email", None)
|
236
|
+
if email:
|
237
|
+
user_settings["email"] = email
|
238
|
+
|
239
|
+
return user_settings
|
240
|
+
|
241
|
+
def _check(self) -> None:
|
242
|
+
if hasattr(threading, "main_thread"):
|
243
|
+
if threading.current_thread() is not threading.main_thread():
|
244
|
+
pass
|
245
|
+
elif threading.current_thread().name != "MainThread":
|
246
|
+
print("bad thread2", threading.current_thread().name)
|
247
|
+
if getattr(sys, "frozen", False):
|
248
|
+
print("frozen, could be trouble")
|
249
|
+
|
250
|
+
def _setup(self) -> None:
|
251
|
+
if not self._settings._noop and not self._settings._disable_service:
|
252
|
+
from wandb.sdk.lib import service_connection
|
253
|
+
|
254
|
+
self._connection = service_connection.connect_to_service(self._settings)
|
255
|
+
|
256
|
+
sweep_path = self._settings.sweep_param_path
|
257
|
+
if sweep_path:
|
258
|
+
self._sweep_config = config_util.dict_from_config_file(
|
259
|
+
sweep_path, must_exist=True
|
260
|
+
)
|
261
|
+
|
262
|
+
# if config_paths was set, read in config dict
|
263
|
+
if self._settings.config_paths:
|
264
|
+
# TODO(jhr): handle load errors, handle list of files
|
265
|
+
for config_path in self._settings.config_paths:
|
266
|
+
config_dict = config_util.dict_from_config_file(config_path)
|
267
|
+
if config_dict is None:
|
268
|
+
continue
|
269
|
+
if self._config is not None:
|
270
|
+
self._config.update(config_dict)
|
271
|
+
else:
|
272
|
+
self._config = config_dict
|
273
|
+
|
274
|
+
def _teardown(self, exit_code: Optional[int] = None) -> None:
|
275
|
+
import_hooks.unregister_all_post_import_hooks()
|
276
|
+
|
277
|
+
if not self._connection:
|
278
|
+
return
|
279
|
+
|
280
|
+
internal_exit_code = self._connection.teardown(exit_code or 0)
|
281
|
+
|
282
|
+
# Reset to None so that setup() creates a new connection.
|
283
|
+
self._connection = None
|
284
|
+
|
285
|
+
if internal_exit_code != 0:
|
286
|
+
sys.exit(internal_exit_code)
|
287
|
+
|
288
|
+
@property
|
289
|
+
def service(self) -> "Optional[service_connection.ServiceConnection]":
|
290
|
+
"""Returns a connection to the service process, if it exists."""
|
291
|
+
return self._connection
|
292
|
+
|
293
|
+
|
294
|
+
class _WandbSetup:
|
295
|
+
"""Wandb singleton class.
|
296
|
+
|
297
|
+
Note: This is a process local singleton.
|
298
|
+
(Forked processes will get a new copy of the object)
|
299
|
+
"""
|
300
|
+
|
301
|
+
_instance: Optional["_WandbSetup__WandbSetup"] = None
|
302
|
+
|
303
|
+
def __init__(self, settings: Optional[Settings] = None) -> None:
|
304
|
+
pid = os.getpid()
|
305
|
+
if _WandbSetup._instance and _WandbSetup._instance._pid == pid:
|
306
|
+
_WandbSetup._instance._update(settings=settings)
|
307
|
+
return
|
308
|
+
_WandbSetup._instance = _WandbSetup__WandbSetup(settings=settings, pid=pid)
|
309
|
+
|
310
|
+
@property
|
311
|
+
def service(self) -> "Optional[service_connection.ServiceConnection]":
|
312
|
+
"""Returns a connection to the service process, if it exists."""
|
313
|
+
if not self._instance:
|
314
|
+
return None
|
315
|
+
return self._instance.service
|
316
|
+
|
317
|
+
def __getattr__(self, name: str) -> Any:
|
318
|
+
return getattr(self._instance, name)
|
319
|
+
|
320
|
+
|
321
|
+
def _setup(
|
322
|
+
settings: Optional[Settings] = None,
|
323
|
+
_reset: bool = False,
|
324
|
+
) -> Optional["_WandbSetup"]:
|
325
|
+
"""Set up library context."""
|
326
|
+
if _reset:
|
327
|
+
teardown()
|
328
|
+
return None
|
329
|
+
|
330
|
+
wl = _WandbSetup(settings=settings)
|
331
|
+
return wl
|
332
|
+
|
333
|
+
|
334
|
+
def setup(settings: Optional[Settings] = None) -> Optional["_WandbSetup"]:
|
335
|
+
"""Prepares W&B for use in the current process and its children.
|
336
|
+
|
337
|
+
You can usually ignore this as it is implicitly called by `wandb.init()`.
|
338
|
+
|
339
|
+
When using wandb in multiple processes, calling `wandb.setup()`
|
340
|
+
in the parent process before starting child processes may improve
|
341
|
+
performance and resource utilization.
|
342
|
+
|
343
|
+
Note that `wandb.setup()` modifies `os.environ`, and it is important
|
344
|
+
that child processes inherit the modified environment variables.
|
345
|
+
|
346
|
+
See also `wandb.teardown()`.
|
347
|
+
|
348
|
+
Args:
|
349
|
+
settings (Optional[Union[Dict[str, Any], wandb.Settings]]): Configuration settings
|
350
|
+
to apply globally. These can be overridden by subsequent `wandb.init()` calls.
|
351
|
+
|
352
|
+
Example:
|
353
|
+
```python
|
354
|
+
import multiprocessing
|
355
|
+
|
356
|
+
import wandb
|
357
|
+
|
358
|
+
|
359
|
+
def run_experiment(params):
|
360
|
+
with wandb.init(config=params):
|
361
|
+
# Run experiment
|
362
|
+
pass
|
363
|
+
|
364
|
+
|
365
|
+
if __name__ == "__main__":
|
366
|
+
# Start backend and set global config
|
367
|
+
wandb.setup(settings={"project": "my_project"})
|
368
|
+
|
369
|
+
# Define experiment parameters
|
370
|
+
experiment_params = [
|
371
|
+
{"learning_rate": 0.01, "epochs": 10},
|
372
|
+
{"learning_rate": 0.001, "epochs": 20},
|
373
|
+
]
|
374
|
+
|
375
|
+
# Start multiple processes, each running a separate experiment
|
376
|
+
processes = []
|
377
|
+
for params in experiment_params:
|
378
|
+
p = multiprocessing.Process(target=run_experiment, args=(params,))
|
379
|
+
p.start()
|
380
|
+
processes.append(p)
|
381
|
+
|
382
|
+
# Wait for all processes to complete
|
383
|
+
for p in processes:
|
384
|
+
p.join()
|
385
|
+
|
386
|
+
# Optional: Explicitly shut down the backend
|
387
|
+
wandb.teardown()
|
388
|
+
```
|
389
|
+
"""
|
390
|
+
ret = _setup(settings=settings)
|
391
|
+
return ret
|
392
|
+
|
393
|
+
|
394
|
+
def teardown(exit_code: Optional[int] = None) -> None:
|
395
|
+
"""Waits for wandb to finish and frees resources.
|
396
|
+
|
397
|
+
Completes any runs that were not explicitly finished
|
398
|
+
using `run.finish()` and waits for all data to be uploaded.
|
399
|
+
|
400
|
+
It is recommended to call this at the end of a session
|
401
|
+
that used `wandb.setup()`. It is invoked automatically
|
402
|
+
in an `atexit` hook, but this is not reliable in certain setups
|
403
|
+
such as when using Python's `multiprocessing` module.
|
404
|
+
"""
|
405
|
+
setup_instance = _WandbSetup._instance
|
406
|
+
_WandbSetup._instance = None
|
407
|
+
|
408
|
+
if setup_instance:
|
409
|
+
setup_instance._teardown(exit_code=exit_code)
|
@@ -0,0 +1,150 @@
|
|
1
|
+
import abc
|
2
|
+
import typing as t
|
3
|
+
|
4
|
+
from .interface.summary_record import SummaryItem, SummaryRecord
|
5
|
+
|
6
|
+
|
7
|
+
def _get_dict(d):
|
8
|
+
if isinstance(d, dict):
|
9
|
+
return d
|
10
|
+
# assume argparse Namespace
|
11
|
+
return vars(d)
|
12
|
+
|
13
|
+
|
14
|
+
class SummaryDict(metaclass=abc.ABCMeta):
|
15
|
+
"""dict-like wrapper for the nested dictionaries in a SummarySubDict.
|
16
|
+
|
17
|
+
Triggers self._root._callback on property changes.
|
18
|
+
"""
|
19
|
+
|
20
|
+
@abc.abstractmethod
|
21
|
+
def _as_dict(self):
|
22
|
+
raise NotImplementedError
|
23
|
+
|
24
|
+
@abc.abstractmethod
|
25
|
+
def _update(self, record: SummaryRecord):
|
26
|
+
raise NotImplementedError
|
27
|
+
|
28
|
+
def keys(self):
|
29
|
+
return [k for k in self._as_dict().keys() if k != "_wandb"]
|
30
|
+
|
31
|
+
def get(self, key, default=None):
|
32
|
+
return self._as_dict().get(key, default)
|
33
|
+
|
34
|
+
def __getitem__(self, key):
|
35
|
+
item = self._as_dict()[key]
|
36
|
+
|
37
|
+
if isinstance(item, dict):
|
38
|
+
# this nested dict needs to be wrapped:
|
39
|
+
wrapped_item = SummarySubDict()
|
40
|
+
object.__setattr__(wrapped_item, "_items", item)
|
41
|
+
object.__setattr__(wrapped_item, "_parent", self)
|
42
|
+
object.__setattr__(wrapped_item, "_parent_key", key)
|
43
|
+
|
44
|
+
return wrapped_item
|
45
|
+
|
46
|
+
# this item isn't a nested dict
|
47
|
+
return item
|
48
|
+
|
49
|
+
__getattr__ = __getitem__
|
50
|
+
|
51
|
+
def __setitem__(self, key, val):
|
52
|
+
self.update({key: val})
|
53
|
+
|
54
|
+
__setattr__ = __setitem__
|
55
|
+
|
56
|
+
def __delattr__(self, key):
|
57
|
+
record = SummaryRecord()
|
58
|
+
item = SummaryItem()
|
59
|
+
item.key = (key,)
|
60
|
+
record.remove = (item,)
|
61
|
+
self._update(record)
|
62
|
+
|
63
|
+
__delitem__ = __delattr__
|
64
|
+
|
65
|
+
def update(self, d: t.Dict):
|
66
|
+
# import ipdb; ipdb.set_trace()
|
67
|
+
record = SummaryRecord()
|
68
|
+
for key, value in d.items():
|
69
|
+
item = SummaryItem()
|
70
|
+
item.key = (key,)
|
71
|
+
item.value = value
|
72
|
+
record.update.append(item)
|
73
|
+
|
74
|
+
self._update(record)
|
75
|
+
|
76
|
+
|
77
|
+
class Summary(SummaryDict):
|
78
|
+
"""Track single values for each metric for each run.
|
79
|
+
|
80
|
+
By default, a metric's summary is the last value of its History.
|
81
|
+
|
82
|
+
For example, `wandb.log({'accuracy': 0.9})` will add a new step to History and
|
83
|
+
update Summary to the latest value. In some cases, it's more useful to have
|
84
|
+
the maximum or minimum of a metric instead of the final value. You can set
|
85
|
+
history manually `(wandb.summary['accuracy'] = best_acc)`.
|
86
|
+
|
87
|
+
In the UI, summary metrics appear in the table to compare across runs.
|
88
|
+
Summary metrics are also used in visualizations like the scatter plot and
|
89
|
+
parallel coordinates chart.
|
90
|
+
|
91
|
+
After training has completed, you may want to save evaluation metrics to a
|
92
|
+
run. Summary can handle numpy arrays and PyTorch/TensorFlow tensors. When
|
93
|
+
you save one of these types to Summary, we persist the entire tensor in a
|
94
|
+
binary file and store high level metrics in the summary object, such as min,
|
95
|
+
mean, variance, and 95th percentile.
|
96
|
+
|
97
|
+
Examples:
|
98
|
+
```python
|
99
|
+
wandb.init(config=args)
|
100
|
+
|
101
|
+
best_accuracy = 0
|
102
|
+
for epoch in range(1, args.epochs + 1):
|
103
|
+
test_loss, test_accuracy = test()
|
104
|
+
if test_accuracy > best_accuracy:
|
105
|
+
wandb.run.summary["best_accuracy"] = test_accuracy
|
106
|
+
best_accuracy = test_accuracy
|
107
|
+
```
|
108
|
+
"""
|
109
|
+
|
110
|
+
_update_callback: t.Callable
|
111
|
+
_get_current_summary_callback: t.Callable
|
112
|
+
|
113
|
+
def __init__(self, get_current_summary_callback: t.Callable):
|
114
|
+
super().__init__()
|
115
|
+
object.__setattr__(self, "_update_callback", None)
|
116
|
+
object.__setattr__(
|
117
|
+
self, "_get_current_summary_callback", get_current_summary_callback
|
118
|
+
)
|
119
|
+
|
120
|
+
def _set_update_callback(self, update_callback: t.Callable):
|
121
|
+
object.__setattr__(self, "_update_callback", update_callback)
|
122
|
+
|
123
|
+
def _as_dict(self):
|
124
|
+
return self._get_current_summary_callback()
|
125
|
+
|
126
|
+
def _update(self, record: SummaryRecord):
|
127
|
+
if self._update_callback: # type: ignore
|
128
|
+
self._update_callback(record)
|
129
|
+
|
130
|
+
|
131
|
+
class SummarySubDict(SummaryDict):
|
132
|
+
"""Non-root node of the summary data structure.
|
133
|
+
|
134
|
+
Contains a path to itself from the root.
|
135
|
+
"""
|
136
|
+
|
137
|
+
_items: t.Dict
|
138
|
+
_parent: SummaryDict
|
139
|
+
_parent_key: str
|
140
|
+
|
141
|
+
def __init__(self):
|
142
|
+
object.__setattr__(self, "_items", dict())
|
143
|
+
object.__setattr__(self, "_parent", None)
|
144
|
+
object.__setattr__(self, "_parent_key", None)
|
145
|
+
|
146
|
+
def _as_dict(self):
|
147
|
+
return self._items
|
148
|
+
|
149
|
+
def _update(self, record: SummaryRecord):
|
150
|
+
return self._parent._update(record._add_next_parent(self._parent_key))
|
wandb/sdk/wandb_sweep.py
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
import urllib.parse
|
2
|
+
from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Union
|
3
|
+
|
4
|
+
import wandb
|
5
|
+
from wandb import env
|
6
|
+
from wandb.apis import InternalApi
|
7
|
+
from wandb.sdk.launch.sweeps.utils import handle_sweep_config_violations
|
8
|
+
|
9
|
+
from . import wandb_login
|
10
|
+
|
11
|
+
if TYPE_CHECKING:
|
12
|
+
from wandb.wandb_controller import _WandbController
|
13
|
+
|
14
|
+
|
15
|
+
def _get_sweep_url(api, sweep_id):
|
16
|
+
"""Return sweep url if we can figure it out."""
|
17
|
+
if api.api_key:
|
18
|
+
if api.settings("entity") is None:
|
19
|
+
viewer = api.viewer()
|
20
|
+
if viewer.get("entity"):
|
21
|
+
api.set_setting("entity", viewer["entity"])
|
22
|
+
project = api.settings("project")
|
23
|
+
if not project:
|
24
|
+
return
|
25
|
+
if api.settings("entity"):
|
26
|
+
return "{base}/{entity}/{project}/sweeps/{sweepid}".format(
|
27
|
+
base=api.app_url,
|
28
|
+
entity=urllib.parse.quote(api.settings("entity")),
|
29
|
+
project=urllib.parse.quote(project),
|
30
|
+
sweepid=urllib.parse.quote(sweep_id),
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def sweep(
|
35
|
+
sweep: Union[dict, Callable],
|
36
|
+
entity: Optional[str] = None,
|
37
|
+
project: Optional[str] = None,
|
38
|
+
prior_runs: Optional[List[str]] = None,
|
39
|
+
) -> str:
|
40
|
+
"""Initialize a hyperparameter sweep.
|
41
|
+
|
42
|
+
Search for hyperparameters that optimizes a cost function
|
43
|
+
of a machine learning model by testing various combinations.
|
44
|
+
|
45
|
+
Make note the unique identifier, `sweep_id`, that is returned.
|
46
|
+
At a later step provide the `sweep_id` to a sweep agent.
|
47
|
+
|
48
|
+
Args:
|
49
|
+
sweep: The configuration of a hyperparameter search.
|
50
|
+
(or configuration generator). See
|
51
|
+
[Sweep configuration structure](https://docs.wandb.ai/guides/sweeps/define-sweep-configuration)
|
52
|
+
for information on how to define your sweep.
|
53
|
+
If you provide a callable, ensure that the callable does
|
54
|
+
not take arguments and that it returns a dictionary that
|
55
|
+
conforms to the W&B sweep config spec.
|
56
|
+
entity: The username or team name where you want to send W&B
|
57
|
+
runs created by the sweep to. Ensure that the entity you
|
58
|
+
specify already exists. If you don't specify an entity,
|
59
|
+
the run will be sent to your default entity,
|
60
|
+
which is usually your username.
|
61
|
+
project: The name of the project where W&B runs created from
|
62
|
+
the sweep are sent to. If the project is not specified, the
|
63
|
+
run is sent to a project labeled 'Uncategorized'.
|
64
|
+
prior_runs: The run IDs of existing runs to add to this sweep.
|
65
|
+
|
66
|
+
Returns:
|
67
|
+
sweep_id: str. A unique identifier for the sweep.
|
68
|
+
"""
|
69
|
+
if callable(sweep):
|
70
|
+
sweep = sweep()
|
71
|
+
"""Sweep create for controller api and jupyter (eventually for cli)."""
|
72
|
+
|
73
|
+
# Project may be only found in the sweep config.
|
74
|
+
if project is None and isinstance(sweep, dict):
|
75
|
+
project = sweep.get("project", None)
|
76
|
+
|
77
|
+
if entity:
|
78
|
+
env.set_entity(entity)
|
79
|
+
if project:
|
80
|
+
env.set_project(project)
|
81
|
+
|
82
|
+
# Make sure we are logged in
|
83
|
+
if wandb.run is None:
|
84
|
+
wandb_login._login(_silent=True)
|
85
|
+
api = InternalApi()
|
86
|
+
sweep_id, warnings = api.upsert_sweep(sweep, prior_runs=prior_runs)
|
87
|
+
handle_sweep_config_violations(warnings)
|
88
|
+
print("Create sweep with ID:", sweep_id)
|
89
|
+
sweep_url = _get_sweep_url(api, sweep_id)
|
90
|
+
if sweep_url:
|
91
|
+
print("Sweep URL:", sweep_url)
|
92
|
+
return sweep_id
|
93
|
+
|
94
|
+
|
95
|
+
def controller(
|
96
|
+
sweep_id_or_config: Optional[Union[str, Dict]] = None,
|
97
|
+
entity: Optional[str] = None,
|
98
|
+
project: Optional[str] = None,
|
99
|
+
) -> "_WandbController":
|
100
|
+
"""Public sweep controller constructor.
|
101
|
+
|
102
|
+
Usage:
|
103
|
+
```python
|
104
|
+
import wandb
|
105
|
+
|
106
|
+
tuner = wandb.controller(...)
|
107
|
+
print(tuner.sweep_config)
|
108
|
+
print(tuner.sweep_id)
|
109
|
+
tuner.configure_search(...)
|
110
|
+
tuner.configure_stopping(...)
|
111
|
+
```
|
112
|
+
|
113
|
+
"""
|
114
|
+
from ..wandb_controller import _WandbController
|
115
|
+
|
116
|
+
c = _WandbController(
|
117
|
+
sweep_id_or_config=sweep_id_or_config, entity=entity, project=project
|
118
|
+
)
|
119
|
+
return c
|