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,102 @@
|
|
1
|
+
import inspect
|
2
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence
|
3
|
+
|
4
|
+
import wandb
|
5
|
+
from wandb.util import get_module
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
np_array = get_module("numpy.array")
|
9
|
+
torch_float_tensor = get_module("torch.FloatTensor")
|
10
|
+
|
11
|
+
|
12
|
+
def chunkify(input_list, chunk_size) -> List:
|
13
|
+
chunk_size = max(1, chunk_size)
|
14
|
+
return [
|
15
|
+
input_list[i : i + chunk_size] for i in range(0, len(input_list), chunk_size)
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def get_updated_kwargs(
|
20
|
+
pipeline: Any, args: Sequence[Any], kwargs: Dict[str, Any]
|
21
|
+
) -> Dict[str, Any]:
|
22
|
+
pipeline_call_parameters = list(
|
23
|
+
inspect.signature(pipeline.__call__).parameters.items()
|
24
|
+
)
|
25
|
+
for idx, arg in enumerate(args):
|
26
|
+
kwargs[pipeline_call_parameters[idx][0]] = arg
|
27
|
+
for pipeline_parameter in pipeline_call_parameters:
|
28
|
+
if pipeline_parameter[0] not in kwargs:
|
29
|
+
kwargs[pipeline_parameter[0]] = pipeline_parameter[1].default
|
30
|
+
if "generator" in kwargs:
|
31
|
+
generator = kwargs["generator"]
|
32
|
+
kwargs["generator"] = (
|
33
|
+
{
|
34
|
+
"seed": generator.initial_seed(),
|
35
|
+
"device": generator.device,
|
36
|
+
"random_state": generator.get_state().cpu().numpy().tolist(),
|
37
|
+
}
|
38
|
+
if generator is not None
|
39
|
+
else None
|
40
|
+
)
|
41
|
+
if "ip_adapter_image" in kwargs:
|
42
|
+
if kwargs["ip_adapter_image"] is not None:
|
43
|
+
wandb.log({"IP-Adapter-Image": wandb.Image(kwargs["ip_adapter_image"])})
|
44
|
+
return kwargs
|
45
|
+
|
46
|
+
|
47
|
+
def postprocess_pils_to_np(image: List) -> "np_array":
|
48
|
+
np = get_module(
|
49
|
+
"numpy",
|
50
|
+
required="Please ensure NumPy is installed. You can run `pip install numpy` to install it.",
|
51
|
+
)
|
52
|
+
return np.stack(
|
53
|
+
[np.transpose(np.array(img).astype("uint8"), axes=(2, 0, 1)) for img in image],
|
54
|
+
axis=0,
|
55
|
+
)
|
56
|
+
|
57
|
+
|
58
|
+
def postprocess_np_arrays_for_video(
|
59
|
+
images: List["np_array"], normalize: Optional[bool] = False
|
60
|
+
) -> "np_array":
|
61
|
+
np = get_module(
|
62
|
+
"numpy",
|
63
|
+
required="Please ensure NumPy is installed. You can run `pip install numpy` to install it.",
|
64
|
+
)
|
65
|
+
images = [(img * 255).astype("uint8") for img in images] if normalize else images
|
66
|
+
return np.transpose(np.stack((images), axis=0), axes=(0, 3, 1, 2))
|
67
|
+
|
68
|
+
|
69
|
+
def decode_sdxl_t2i_latents(pipeline: Any, latents: "torch_float_tensor") -> List:
|
70
|
+
"""Decode latents generated by [`diffusers.StableDiffusionXLPipeline`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#stable-diffusion-xl).
|
71
|
+
|
72
|
+
Arguments:
|
73
|
+
pipeline: (diffusers.DiffusionPipeline) The Diffusion Pipeline from
|
74
|
+
[`diffusers`](https://huggingface.co/docs/diffusers).
|
75
|
+
latents (torch.FloatTensor): The generated latents.
|
76
|
+
|
77
|
+
Returns:
|
78
|
+
List of `PIL` images corresponding to the generated latents.
|
79
|
+
"""
|
80
|
+
torch = get_module(
|
81
|
+
"torch",
|
82
|
+
required="Please ensure PyTorch is installed. You can check out https://pytorch.org/get-started/locally/#start-locally for installation instructions.",
|
83
|
+
)
|
84
|
+
with torch.no_grad():
|
85
|
+
needs_upcasting = (
|
86
|
+
pipeline.vae.dtype == torch.float16 and pipeline.vae.config.force_upcast
|
87
|
+
)
|
88
|
+
if needs_upcasting:
|
89
|
+
pipeline.upcast_vae()
|
90
|
+
latents = latents.to(
|
91
|
+
next(iter(pipeline.vae.post_quant_conv.parameters())).dtype
|
92
|
+
)
|
93
|
+
images = pipeline.vae.decode(
|
94
|
+
latents / pipeline.vae.config.scaling_factor, return_dict=False
|
95
|
+
)[0]
|
96
|
+
if needs_upcasting:
|
97
|
+
pipeline.vae.to(dtype=torch.float16)
|
98
|
+
if pipeline.watermark is not None:
|
99
|
+
images = pipeline.watermark.apply_watermark(images)
|
100
|
+
images = pipeline.image_processor.postprocess(images, output_type="pil")
|
101
|
+
pipeline.maybe_free_model_hooks()
|
102
|
+
return images
|
@@ -0,0 +1,249 @@
|
|
1
|
+
"""Hooks that add fast.ai v1 Learners to Weights & Biases through a callback.
|
2
|
+
|
3
|
+
Requested logged data can be configured through the callback constructor.
|
4
|
+
|
5
|
+
Examples:
|
6
|
+
WandbCallback can be used when initializing the Learner::
|
7
|
+
|
8
|
+
```
|
9
|
+
from wandb.fastai import WandbCallback
|
10
|
+
[...]
|
11
|
+
learn = Learner(data, ..., callback_fns=WandbCallback)
|
12
|
+
learn.fit(epochs)
|
13
|
+
```
|
14
|
+
|
15
|
+
Custom parameters can be given using functools.partial::
|
16
|
+
|
17
|
+
```
|
18
|
+
from wandb.fastai import WandbCallback
|
19
|
+
from functools import partial
|
20
|
+
[...]
|
21
|
+
learn = Learner(data, ..., callback_fns=partial(WandbCallback, ...))
|
22
|
+
learn.fit(epochs)
|
23
|
+
```
|
24
|
+
|
25
|
+
Finally, it is possible to use WandbCallback only when starting
|
26
|
+
training. In this case it must be instantiated::
|
27
|
+
|
28
|
+
```
|
29
|
+
learn.fit(..., callbacks=WandbCallback(learn))
|
30
|
+
```
|
31
|
+
|
32
|
+
or, with custom parameters::
|
33
|
+
|
34
|
+
```
|
35
|
+
learn.fit(..., callbacks=WandbCallback(learn, ...))
|
36
|
+
```
|
37
|
+
"""
|
38
|
+
|
39
|
+
import random
|
40
|
+
import sys
|
41
|
+
from pathlib import Path
|
42
|
+
from typing import Any, Optional
|
43
|
+
|
44
|
+
if sys.version_info >= (3, 8):
|
45
|
+
from typing import Literal
|
46
|
+
else:
|
47
|
+
from typing_extensions import Literal
|
48
|
+
|
49
|
+
import fastai
|
50
|
+
from fastai.callbacks import TrackerCallback
|
51
|
+
|
52
|
+
import wandb
|
53
|
+
|
54
|
+
try:
|
55
|
+
import matplotlib
|
56
|
+
|
57
|
+
if wandb.wandb_lib.ipython._get_python_type() != "jupyter": # type: ignore[attr-defined]
|
58
|
+
matplotlib.use("Agg") # non-interactive backend (avoid tkinter issues)
|
59
|
+
import matplotlib.pyplot as plt
|
60
|
+
except ImportError:
|
61
|
+
print("Warning: matplotlib required if logging sample image predictions")
|
62
|
+
|
63
|
+
|
64
|
+
class WandbCallback(TrackerCallback):
|
65
|
+
"""Callback for saving model topology, losses & metrics.
|
66
|
+
|
67
|
+
Optionally logs weights, gradients, sample predictions and best trained model.
|
68
|
+
|
69
|
+
Arguments:
|
70
|
+
learn (fastai.basic_train.Learner): the fast.ai learner to hook.
|
71
|
+
log (str): "gradients", "parameters", "all", or None. Losses & metrics are always logged.
|
72
|
+
save_model (bool): save model at the end of each epoch. It will also load best model at the end of training.
|
73
|
+
monitor (str): metric to monitor for saving best model. None uses default TrackerCallback monitor value.
|
74
|
+
mode (str): "auto", "min" or "max" to compare "monitor" values and define best model.
|
75
|
+
input_type (str): "images" or None. Used to display sample predictions.
|
76
|
+
validation_data (list): data used for sample predictions if input_type is set.
|
77
|
+
predictions (int): number of predictions to make if input_type is set and validation_data is None.
|
78
|
+
seed (int): initialize random generator for sample predictions if input_type is set and validation_data is None.
|
79
|
+
"""
|
80
|
+
|
81
|
+
# Record if watch has been called previously (even in another instance)
|
82
|
+
_watch_called = False
|
83
|
+
|
84
|
+
def __init__(
|
85
|
+
self,
|
86
|
+
learn: "fastai.basic_train.Learner",
|
87
|
+
log: Optional[Literal["gradients", "parameters", "all"]] = "gradients",
|
88
|
+
save_model: bool = True,
|
89
|
+
monitor: Optional[str] = None,
|
90
|
+
mode: Literal["auto", "min", "max"] = "auto",
|
91
|
+
input_type: Optional[Literal["images"]] = None,
|
92
|
+
validation_data: Optional[list] = None,
|
93
|
+
predictions: int = 36,
|
94
|
+
seed: int = 12345,
|
95
|
+
) -> None:
|
96
|
+
# Check if wandb.init has been called
|
97
|
+
if wandb.run is None:
|
98
|
+
raise ValueError("You must call wandb.init() before WandbCallback()")
|
99
|
+
|
100
|
+
# Adapted from fast.ai "SaveModelCallback"
|
101
|
+
if monitor is None:
|
102
|
+
# use default TrackerCallback monitor value
|
103
|
+
super().__init__(learn, mode=mode)
|
104
|
+
else:
|
105
|
+
super().__init__(learn, monitor=monitor, mode=mode)
|
106
|
+
self.save_model = save_model
|
107
|
+
self.model_path = Path(wandb.run.dir) / "bestmodel.pth"
|
108
|
+
|
109
|
+
self.log = log
|
110
|
+
self.input_type = input_type
|
111
|
+
self.best = None
|
112
|
+
|
113
|
+
# Select items for sample predictions to see evolution along training
|
114
|
+
self.validation_data = validation_data
|
115
|
+
if input_type and not self.validation_data:
|
116
|
+
wandb_random = random.Random(seed) # For repeatability
|
117
|
+
predictions = min(predictions, len(learn.data.valid_ds))
|
118
|
+
indices = wandb_random.sample(range(len(learn.data.valid_ds)), predictions)
|
119
|
+
self.validation_data = [learn.data.valid_ds[i] for i in indices]
|
120
|
+
|
121
|
+
def on_train_begin(self, **kwargs: Any) -> None:
|
122
|
+
"""Call watch method to log model topology, gradients & weights."""
|
123
|
+
# Set self.best, method inherited from "TrackerCallback" by "SaveModelCallback"
|
124
|
+
super().on_train_begin()
|
125
|
+
|
126
|
+
# Ensure we don't call "watch" multiple times
|
127
|
+
if not WandbCallback._watch_called:
|
128
|
+
WandbCallback._watch_called = True
|
129
|
+
|
130
|
+
# Logs model topology and optionally gradients and weights
|
131
|
+
wandb.watch(self.learn.model, log=self.log)
|
132
|
+
|
133
|
+
def on_epoch_end(
|
134
|
+
self, epoch: int, smooth_loss: float, last_metrics: list, **kwargs: Any
|
135
|
+
) -> None:
|
136
|
+
"""Log training loss, validation loss and custom metrics & log prediction samples & save model."""
|
137
|
+
if self.save_model:
|
138
|
+
# Adapted from fast.ai "SaveModelCallback"
|
139
|
+
current = self.get_monitor_value()
|
140
|
+
if current is not None and self.operator(current, self.best):
|
141
|
+
print(
|
142
|
+
"Better model found at epoch {} with {} value: {}.".format(
|
143
|
+
epoch, self.monitor, current
|
144
|
+
)
|
145
|
+
)
|
146
|
+
self.best = current
|
147
|
+
|
148
|
+
# Save within wandb folder
|
149
|
+
with self.model_path.open("wb") as model_file:
|
150
|
+
self.learn.save(model_file)
|
151
|
+
|
152
|
+
# Log sample predictions if learn.predict is available
|
153
|
+
if self.validation_data:
|
154
|
+
try:
|
155
|
+
self._wandb_log_predictions()
|
156
|
+
except FastaiError as e:
|
157
|
+
wandb.termwarn(e.message)
|
158
|
+
self.validation_data = None # prevent from trying again on next loop
|
159
|
+
except Exception as e:
|
160
|
+
wandb.termwarn(f"Unable to log prediction samples.\n{e}")
|
161
|
+
self.validation_data = None # prevent from trying again on next loop
|
162
|
+
|
163
|
+
# Log losses & metrics
|
164
|
+
# Adapted from fast.ai "CSVLogger"
|
165
|
+
logs = {
|
166
|
+
name: stat
|
167
|
+
for name, stat in list(
|
168
|
+
zip(self.learn.recorder.names, [epoch, smooth_loss] + last_metrics)
|
169
|
+
)
|
170
|
+
}
|
171
|
+
wandb.log(logs)
|
172
|
+
|
173
|
+
def on_train_end(self, **kwargs: Any) -> None:
|
174
|
+
"""Load the best model."""
|
175
|
+
if self.save_model:
|
176
|
+
# Adapted from fast.ai "SaveModelCallback"
|
177
|
+
if self.model_path.is_file():
|
178
|
+
with self.model_path.open("rb") as model_file:
|
179
|
+
self.learn.load(model_file, purge=False)
|
180
|
+
print(f"Loaded best saved model from {self.model_path}")
|
181
|
+
|
182
|
+
def _wandb_log_predictions(self) -> None:
|
183
|
+
"""Log prediction samples."""
|
184
|
+
pred_log = []
|
185
|
+
|
186
|
+
if self.validation_data is None:
|
187
|
+
return
|
188
|
+
|
189
|
+
for x, y in self.validation_data:
|
190
|
+
try:
|
191
|
+
pred = self.learn.predict(x)
|
192
|
+
except Exception:
|
193
|
+
raise FastaiError(
|
194
|
+
'Unable to run "predict" method from Learner to log prediction samples.'
|
195
|
+
)
|
196
|
+
|
197
|
+
# scalar -> likely to be a category
|
198
|
+
# tensor of dim 1 -> likely to be multicategory
|
199
|
+
if not pred[1].shape or pred[1].dim() == 1:
|
200
|
+
pred_log.append(
|
201
|
+
wandb.Image(
|
202
|
+
x.data,
|
203
|
+
caption=f"Ground Truth: {y}\nPrediction: {pred[0]}",
|
204
|
+
)
|
205
|
+
)
|
206
|
+
|
207
|
+
# most vision datasets have a "show" function we can use
|
208
|
+
elif hasattr(x, "show"):
|
209
|
+
# log input data
|
210
|
+
pred_log.append(wandb.Image(x.data, caption="Input data", grouping=3))
|
211
|
+
|
212
|
+
# log label and prediction
|
213
|
+
for im, capt in ((pred[0], "Prediction"), (y, "Ground Truth")):
|
214
|
+
# Resize plot to image resolution
|
215
|
+
# from https://stackoverflow.com/a/13714915
|
216
|
+
my_dpi = 100
|
217
|
+
fig = plt.figure(frameon=False, dpi=my_dpi)
|
218
|
+
h, w = x.size
|
219
|
+
fig.set_size_inches(w / my_dpi, h / my_dpi)
|
220
|
+
ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0])
|
221
|
+
ax.set_axis_off()
|
222
|
+
fig.add_axes(ax)
|
223
|
+
|
224
|
+
# Superpose label or prediction to input image
|
225
|
+
x.show(ax=ax, y=im)
|
226
|
+
pred_log.append(wandb.Image(fig, caption=capt))
|
227
|
+
plt.close(fig)
|
228
|
+
|
229
|
+
# likely to be an image
|
230
|
+
elif hasattr(y, "shape") and (
|
231
|
+
(len(y.shape) == 2) or (len(y.shape) == 3 and y.shape[0] in [1, 3, 4])
|
232
|
+
):
|
233
|
+
pred_log.extend(
|
234
|
+
[
|
235
|
+
wandb.Image(x.data, caption="Input data", grouping=3),
|
236
|
+
wandb.Image(pred[0].data, caption="Prediction"),
|
237
|
+
wandb.Image(y.data, caption="Ground Truth"),
|
238
|
+
]
|
239
|
+
)
|
240
|
+
|
241
|
+
# we just log input data
|
242
|
+
else:
|
243
|
+
pred_log.append(wandb.Image(x.data, caption="Input data"))
|
244
|
+
|
245
|
+
wandb.log({"Prediction Samples": pred_log}, commit=False)
|
246
|
+
|
247
|
+
|
248
|
+
class FastaiError(wandb.Error):
|
249
|
+
pass
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import re
|
2
|
+
import sys
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
import wandb
|
6
|
+
import wandb.util
|
7
|
+
|
8
|
+
if sys.version_info >= (3, 8):
|
9
|
+
from typing import Literal
|
10
|
+
else:
|
11
|
+
from typing_extensions import Literal
|
12
|
+
|
13
|
+
|
14
|
+
_gym_version_lt_0_26: Optional[bool] = None
|
15
|
+
_gymnasium_version_lt_1_0_0: Optional[bool] = None
|
16
|
+
|
17
|
+
_required_error_msg = (
|
18
|
+
"Couldn't import the gymnasium python package, "
|
19
|
+
"install with `pip install gymnasium`"
|
20
|
+
)
|
21
|
+
GymLib = Literal["gym", "gymnasium"]
|
22
|
+
|
23
|
+
|
24
|
+
def monitor():
|
25
|
+
"""Monitor a gym environment.
|
26
|
+
|
27
|
+
Supports both gym and gymnasium.
|
28
|
+
"""
|
29
|
+
gym_lib: Optional[GymLib] = None
|
30
|
+
|
31
|
+
# gym is not maintained anymore, gymnasium is the drop-in replacement - prefer it
|
32
|
+
if wandb.util.get_module("gymnasium") is not None:
|
33
|
+
gym_lib = "gymnasium"
|
34
|
+
elif wandb.util.get_module("gym") is not None:
|
35
|
+
gym_lib = "gym"
|
36
|
+
|
37
|
+
if gym_lib is None:
|
38
|
+
raise wandb.Error(_required_error_msg)
|
39
|
+
|
40
|
+
global _gym_version_lt_0_26
|
41
|
+
global _gymnasium_version_lt_1_0_0
|
42
|
+
|
43
|
+
if _gym_version_lt_0_26 is None or _gymnasium_version_lt_1_0_0 is None:
|
44
|
+
if gym_lib == "gym":
|
45
|
+
import gym
|
46
|
+
else:
|
47
|
+
import gymnasium as gym # type: ignore
|
48
|
+
|
49
|
+
from wandb.util import parse_version
|
50
|
+
|
51
|
+
gym_lib_version = parse_version(gym.__version__)
|
52
|
+
_gym_version_lt_0_26 = gym_lib_version < parse_version("0.26.0")
|
53
|
+
_gymnasium_version_lt_1_0_0 = gym_lib_version < parse_version("1.0.0a1")
|
54
|
+
|
55
|
+
path = "path" # Default path
|
56
|
+
if gym_lib == "gymnasium" and not _gymnasium_version_lt_1_0_0:
|
57
|
+
vcr_recorder_attribute = "RecordVideo"
|
58
|
+
wrappers = wandb.util.get_module(
|
59
|
+
f"{gym_lib}.wrappers",
|
60
|
+
required=_required_error_msg,
|
61
|
+
)
|
62
|
+
recorder = getattr(wrappers, vcr_recorder_attribute)
|
63
|
+
else:
|
64
|
+
vcr = wandb.util.get_module(
|
65
|
+
f"{gym_lib}.wrappers.monitoring.video_recorder",
|
66
|
+
required=_required_error_msg,
|
67
|
+
)
|
68
|
+
# Breaking change in gym 0.26.0
|
69
|
+
if _gym_version_lt_0_26:
|
70
|
+
vcr_recorder_attribute = "ImageEncoder"
|
71
|
+
recorder = getattr(vcr, vcr_recorder_attribute)
|
72
|
+
path = "output_path" # Override path for older gym versions
|
73
|
+
else:
|
74
|
+
vcr_recorder_attribute = "VideoRecorder"
|
75
|
+
recorder = getattr(vcr, vcr_recorder_attribute)
|
76
|
+
|
77
|
+
recorder.orig_close = recorder.close
|
78
|
+
|
79
|
+
def close(self):
|
80
|
+
recorder.orig_close(self)
|
81
|
+
if not self.enabled:
|
82
|
+
return
|
83
|
+
if wandb.run:
|
84
|
+
m = re.match(r".+(video\.\d+).+", getattr(self, path))
|
85
|
+
key = m.group(1) if m else "videos"
|
86
|
+
wandb.log({key: wandb.Video(getattr(self, path))})
|
87
|
+
|
88
|
+
def del_(self):
|
89
|
+
self.orig_close()
|
90
|
+
|
91
|
+
if not _gym_version_lt_0_26:
|
92
|
+
recorder.__del__ = del_
|
93
|
+
recorder.close = close
|
94
|
+
|
95
|
+
if gym_lib == "gymnasium" and not _gymnasium_version_lt_1_0_0:
|
96
|
+
wrapper_name = vcr_recorder_attribute
|
97
|
+
else:
|
98
|
+
wrapper_name = f"monitoring.video_recorder.{vcr_recorder_attribute}"
|
99
|
+
|
100
|
+
wandb.patched["gym"].append(
|
101
|
+
[
|
102
|
+
f"{gym_lib}.wrappers.{wrapper_name}",
|
103
|
+
"close",
|
104
|
+
]
|
105
|
+
)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from wandb.sdk.integration_utils.auto_logging import AutologAPI
|
4
|
+
|
5
|
+
from .resolver import HuggingFacePipelineRequestResponseResolver
|
6
|
+
|
7
|
+
logger = logging.getLogger(__name__)
|
8
|
+
|
9
|
+
resolver = HuggingFacePipelineRequestResponseResolver()
|
10
|
+
|
11
|
+
autolog = AutologAPI(
|
12
|
+
name="transformers",
|
13
|
+
symbols=("Pipeline.__call__",),
|
14
|
+
resolver=resolver,
|
15
|
+
telemetry_feature="hf_pipeline_autolog",
|
16
|
+
)
|
17
|
+
|
18
|
+
autolog.get_latest_id = resolver.get_latest_id
|
@@ -0,0 +1,213 @@
|
|
1
|
+
import logging
|
2
|
+
import os
|
3
|
+
from datetime import datetime
|
4
|
+
from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
|
5
|
+
|
6
|
+
import pytz
|
7
|
+
|
8
|
+
import wandb
|
9
|
+
from wandb.sdk.integration_utils.auto_logging import Response
|
10
|
+
from wandb.sdk.lib.runid import generate_id
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
SUPPORTED_PIPELINE_TASKS = [
|
15
|
+
"text-classification",
|
16
|
+
"sentiment-analysis",
|
17
|
+
"question-answering",
|
18
|
+
"summarization",
|
19
|
+
"translation",
|
20
|
+
"text2text-generation",
|
21
|
+
"text-generation",
|
22
|
+
# "conversational",
|
23
|
+
]
|
24
|
+
|
25
|
+
PIPELINES_WITH_TOP_K = [
|
26
|
+
"text-classification",
|
27
|
+
"sentiment-analysis",
|
28
|
+
"question-answering",
|
29
|
+
]
|
30
|
+
|
31
|
+
|
32
|
+
class HuggingFacePipelineRequestResponseResolver:
|
33
|
+
"""Resolver for HuggingFace's pipeline request and responses, providing necessary data transformations and formatting.
|
34
|
+
|
35
|
+
This is based off (from wandb.sdk.integration_utils.auto_logging import RequestResponseResolver)
|
36
|
+
"""
|
37
|
+
|
38
|
+
autolog_id = None
|
39
|
+
|
40
|
+
def __call__(
|
41
|
+
self,
|
42
|
+
args: Sequence[Any],
|
43
|
+
kwargs: Dict[str, Any],
|
44
|
+
response: Response,
|
45
|
+
start_time: float,
|
46
|
+
time_elapsed: float,
|
47
|
+
) -> Optional[Dict[str, Any]]:
|
48
|
+
"""Main call method for this class.
|
49
|
+
|
50
|
+
:param args: list of arguments
|
51
|
+
:param kwargs: dictionary of keyword arguments
|
52
|
+
:param response: the response from the request
|
53
|
+
:param start_time: time when request started
|
54
|
+
:param time_elapsed: time elapsed for the request
|
55
|
+
:returns: packed data as a dictionary for logging to wandb, None if an exception occurred
|
56
|
+
"""
|
57
|
+
try:
|
58
|
+
pipe, input_data = args[:2]
|
59
|
+
task = pipe.task
|
60
|
+
|
61
|
+
# Translation tasks are in the form of `translation_x_to_y`
|
62
|
+
if task in SUPPORTED_PIPELINE_TASKS or task.startswith("translation"):
|
63
|
+
model = self._get_model(pipe)
|
64
|
+
if model is None:
|
65
|
+
return None
|
66
|
+
model_alias = model.name_or_path
|
67
|
+
timestamp = datetime.now(pytz.utc)
|
68
|
+
|
69
|
+
input_data, response = self._transform_task_specific_data(
|
70
|
+
task, input_data, response
|
71
|
+
)
|
72
|
+
formatted_data = self._format_data(task, input_data, response, kwargs)
|
73
|
+
packed_data = self._create_table(
|
74
|
+
formatted_data, model_alias, timestamp, time_elapsed
|
75
|
+
)
|
76
|
+
table_name = os.environ.get("WANDB_AUTOLOG_TABLE_NAME", f"{task}")
|
77
|
+
# TODO: Let users decide the name in a way that does not use an environment variable
|
78
|
+
|
79
|
+
return {
|
80
|
+
table_name: wandb.Table(
|
81
|
+
columns=packed_data[0], data=packed_data[1:]
|
82
|
+
)
|
83
|
+
}
|
84
|
+
|
85
|
+
logger.warning(
|
86
|
+
f"The task: `{task}` is not yet supported.\nPlease contact `wandb` to notify us if you would like support for this task"
|
87
|
+
)
|
88
|
+
except Exception as e:
|
89
|
+
logger.warning(e)
|
90
|
+
return None
|
91
|
+
|
92
|
+
# TODO: This should have a dependency on PreTrainedModel. i.e. isinstance(PreTrainedModel)
|
93
|
+
# from transformers.modeling_utils import PreTrainedModel
|
94
|
+
# We do not want this dependency explicitly in our codebase so we make a very general
|
95
|
+
# assumption about the structure of the pipeline which may have unintended consequences
|
96
|
+
def _get_model(self, pipe) -> Optional[Any]:
|
97
|
+
"""Extracts model from the pipeline.
|
98
|
+
|
99
|
+
:param pipe: the HuggingFace pipeline
|
100
|
+
:returns: Model if available, None otherwise
|
101
|
+
"""
|
102
|
+
model = pipe.model
|
103
|
+
try:
|
104
|
+
return model.model
|
105
|
+
except AttributeError:
|
106
|
+
logger.info(
|
107
|
+
"Model does not have a `.model` attribute. Assuming `pipe.model` is the correct model."
|
108
|
+
)
|
109
|
+
return model
|
110
|
+
|
111
|
+
@staticmethod
|
112
|
+
def _transform_task_specific_data(
|
113
|
+
task: str, input_data: Union[List[Any], Any], response: Union[List[Any], Any]
|
114
|
+
) -> Tuple[Union[List[Any], Any], Union[List[Any], Any]]:
|
115
|
+
"""Transform input and response data based on specific tasks.
|
116
|
+
|
117
|
+
:param task: the task name
|
118
|
+
:param input_data: the input data
|
119
|
+
:param response: the response data
|
120
|
+
:returns: tuple of transformed input_data and response
|
121
|
+
"""
|
122
|
+
if task == "question-answering":
|
123
|
+
input_data = input_data if isinstance(input_data, list) else [input_data]
|
124
|
+
input_data = [data.__dict__ for data in input_data]
|
125
|
+
elif task == "conversational":
|
126
|
+
# We only grab the latest input/output pair from the conversation
|
127
|
+
# Logging the whole conversation renders strangely.
|
128
|
+
input_data = input_data if isinstance(input_data, list) else [input_data]
|
129
|
+
input_data = [data.__dict__["past_user_inputs"][-1] for data in input_data]
|
130
|
+
|
131
|
+
response = response if isinstance(response, list) else [response]
|
132
|
+
response = [data.__dict__["generated_responses"][-1] for data in response]
|
133
|
+
return input_data, response
|
134
|
+
|
135
|
+
def _format_data(
|
136
|
+
self,
|
137
|
+
task: str,
|
138
|
+
input_data: Union[List[Any], Any],
|
139
|
+
response: Union[List[Any], Any],
|
140
|
+
kwargs: Dict[str, Any],
|
141
|
+
) -> List[Dict[str, Any]]:
|
142
|
+
"""Formats input data, response, and kwargs into a list of dictionaries.
|
143
|
+
|
144
|
+
:param task: the task name
|
145
|
+
:param input_data: the input data
|
146
|
+
:param response: the response data
|
147
|
+
:param kwargs: dictionary of keyword arguments
|
148
|
+
:returns: list of dictionaries containing formatted data
|
149
|
+
"""
|
150
|
+
input_data = input_data if isinstance(input_data, list) else [input_data]
|
151
|
+
response = response if isinstance(response, list) else [response]
|
152
|
+
|
153
|
+
formatted_data = []
|
154
|
+
for i_text, r_text in zip(input_data, response):
|
155
|
+
# Unpack single element responses for better rendering in wandb UI when it is a task without top_k
|
156
|
+
# top_k = 1 would unpack the response into a single element while top_k > 1 would be a list
|
157
|
+
# this would cause the UI to not properly concatenate the tables of the same task by omitting the elements past the first
|
158
|
+
if (
|
159
|
+
(isinstance(r_text, list))
|
160
|
+
and (len(r_text) == 1)
|
161
|
+
and task not in PIPELINES_WITH_TOP_K
|
162
|
+
):
|
163
|
+
r_text = r_text[0]
|
164
|
+
formatted_data.append(
|
165
|
+
{"input": i_text, "response": r_text, "kwargs": kwargs}
|
166
|
+
)
|
167
|
+
return formatted_data
|
168
|
+
|
169
|
+
def _create_table(
|
170
|
+
self,
|
171
|
+
formatted_data: List[Dict[str, Any]],
|
172
|
+
model_alias: str,
|
173
|
+
timestamp: float,
|
174
|
+
time_elapsed: float,
|
175
|
+
) -> List[List[Any]]:
|
176
|
+
"""Creates a table from formatted data, model alias, timestamp, and elapsed time.
|
177
|
+
|
178
|
+
:param formatted_data: list of dictionaries containing formatted data
|
179
|
+
:param model_alias: alias of the model
|
180
|
+
:param timestamp: timestamp of the data
|
181
|
+
:param time_elapsed: time elapsed from the beginning
|
182
|
+
:returns: list of lists, representing a table of data. [0]th element = columns. [1]st element = data
|
183
|
+
"""
|
184
|
+
header = [
|
185
|
+
"ID",
|
186
|
+
"Model Alias",
|
187
|
+
"Timestamp",
|
188
|
+
"Elapsed Time",
|
189
|
+
"Input",
|
190
|
+
"Response",
|
191
|
+
"Kwargs",
|
192
|
+
]
|
193
|
+
table = [header]
|
194
|
+
autolog_id = generate_id(length=16)
|
195
|
+
|
196
|
+
for data in formatted_data:
|
197
|
+
row = [
|
198
|
+
autolog_id,
|
199
|
+
model_alias,
|
200
|
+
timestamp,
|
201
|
+
time_elapsed,
|
202
|
+
data["input"],
|
203
|
+
data["response"],
|
204
|
+
data["kwargs"],
|
205
|
+
]
|
206
|
+
table.append(row)
|
207
|
+
|
208
|
+
self.autolog_id = autolog_id
|
209
|
+
|
210
|
+
return table
|
211
|
+
|
212
|
+
def get_latest_id(self):
|
213
|
+
return self.autolog_id
|