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,240 @@
|
|
1
|
+
import datetime
|
2
|
+
import io
|
3
|
+
import logging
|
4
|
+
from dataclasses import asdict, dataclass
|
5
|
+
from typing import Any, Dict, List, Optional, Sequence
|
6
|
+
|
7
|
+
import wandb
|
8
|
+
from wandb.sdk.data_types import trace_tree
|
9
|
+
from wandb.sdk.integration_utils.auto_logging import Response
|
10
|
+
|
11
|
+
logger = logging.getLogger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
@dataclass
|
15
|
+
class UsageMetrics:
|
16
|
+
elapsed_time: float = None
|
17
|
+
prompt_tokens: int = None
|
18
|
+
completion_tokens: int = None
|
19
|
+
total_tokens: int = None
|
20
|
+
|
21
|
+
|
22
|
+
@dataclass
|
23
|
+
class Metrics:
|
24
|
+
usage: UsageMetrics = None
|
25
|
+
stats: wandb.Table = None
|
26
|
+
trace: trace_tree.WBTraceTree = None
|
27
|
+
|
28
|
+
|
29
|
+
usage_metric_keys = {f"usage/{k}" for k in asdict(UsageMetrics())}
|
30
|
+
|
31
|
+
|
32
|
+
class OpenAIRequestResponseResolver:
|
33
|
+
def __init__(self):
|
34
|
+
self.define_metrics_called = False
|
35
|
+
|
36
|
+
def __call__(
|
37
|
+
self,
|
38
|
+
args: Sequence[Any],
|
39
|
+
kwargs: Dict[str, Any],
|
40
|
+
response: Response,
|
41
|
+
start_time: float, # pass to comply with the protocol, but use response["created"] instead
|
42
|
+
time_elapsed: float,
|
43
|
+
) -> Optional[Dict[str, Any]]:
|
44
|
+
request = kwargs
|
45
|
+
|
46
|
+
if not self.define_metrics_called:
|
47
|
+
# define metrics on first call
|
48
|
+
for key in usage_metric_keys:
|
49
|
+
wandb.define_metric(key, step_metric="_timestamp")
|
50
|
+
self.define_metrics_called = True
|
51
|
+
|
52
|
+
try:
|
53
|
+
if response.get("object") == "edit":
|
54
|
+
return self._resolve_edit(request, response, time_elapsed)
|
55
|
+
elif response.get("object") == "text_completion":
|
56
|
+
return self._resolve_completion(request, response, time_elapsed)
|
57
|
+
elif response.get("object") == "chat.completion":
|
58
|
+
return self._resolve_chat_completion(request, response, time_elapsed)
|
59
|
+
else:
|
60
|
+
# todo: properly treat failed requests
|
61
|
+
logger.info(
|
62
|
+
f"Unsupported OpenAI response object: {response.get('object')}"
|
63
|
+
)
|
64
|
+
except Exception as e:
|
65
|
+
logger.warning(f"Failed to resolve request/response: {e}")
|
66
|
+
return None
|
67
|
+
|
68
|
+
@staticmethod
|
69
|
+
def results_to_trace_tree(
|
70
|
+
request: Dict[str, Any],
|
71
|
+
response: Response,
|
72
|
+
results: List[trace_tree.Result],
|
73
|
+
time_elapsed: float,
|
74
|
+
) -> trace_tree.WBTraceTree:
|
75
|
+
"""Converts the request, response, and results into a trace tree.
|
76
|
+
|
77
|
+
params:
|
78
|
+
request: The request dictionary
|
79
|
+
response: The response object
|
80
|
+
results: A list of results object
|
81
|
+
time_elapsed: The time elapsed in seconds
|
82
|
+
returns:
|
83
|
+
A wandb trace tree object.
|
84
|
+
"""
|
85
|
+
start_time_ms = int(round(response["created"] * 1000))
|
86
|
+
end_time_ms = start_time_ms + int(round(time_elapsed * 1000))
|
87
|
+
span = trace_tree.Span(
|
88
|
+
name=f"{response.get('model', 'openai')}_{response['object']}_{response.get('created')}",
|
89
|
+
attributes=dict(response), # type: ignore
|
90
|
+
start_time_ms=start_time_ms,
|
91
|
+
end_time_ms=end_time_ms,
|
92
|
+
span_kind=trace_tree.SpanKind.LLM,
|
93
|
+
results=results,
|
94
|
+
)
|
95
|
+
model_obj = {"request": request, "response": response, "_kind": "openai"}
|
96
|
+
return trace_tree.WBTraceTree(root_span=span, model_dict=model_obj)
|
97
|
+
|
98
|
+
def _resolve_edit(
|
99
|
+
self,
|
100
|
+
request: Dict[str, Any],
|
101
|
+
response: Response,
|
102
|
+
time_elapsed: float,
|
103
|
+
) -> Dict[str, Any]:
|
104
|
+
"""Resolves the request and response objects for `openai.Edit`."""
|
105
|
+
request_str = (
|
106
|
+
f"\n\n**Instruction**: {request['instruction']}\n\n"
|
107
|
+
f"**Input**: {request['input']}\n"
|
108
|
+
)
|
109
|
+
choices = [
|
110
|
+
f"\n\n**Edited**: {choice['text']}\n" for choice in response["choices"]
|
111
|
+
]
|
112
|
+
|
113
|
+
return self._resolve_metrics(
|
114
|
+
request=request,
|
115
|
+
response=response,
|
116
|
+
request_str=request_str,
|
117
|
+
choices=choices,
|
118
|
+
time_elapsed=time_elapsed,
|
119
|
+
)
|
120
|
+
|
121
|
+
def _resolve_completion(
|
122
|
+
self,
|
123
|
+
request: Dict[str, Any],
|
124
|
+
response: Response,
|
125
|
+
time_elapsed: float,
|
126
|
+
) -> Dict[str, Any]:
|
127
|
+
"""Resolves the request and response objects for `openai.Completion`."""
|
128
|
+
request_str = f"\n\n**Prompt**: {request['prompt']}\n"
|
129
|
+
choices = [
|
130
|
+
f"\n\n**Completion**: {choice['text']}\n" for choice in response["choices"]
|
131
|
+
]
|
132
|
+
|
133
|
+
return self._resolve_metrics(
|
134
|
+
request=request,
|
135
|
+
response=response,
|
136
|
+
request_str=request_str,
|
137
|
+
choices=choices,
|
138
|
+
time_elapsed=time_elapsed,
|
139
|
+
)
|
140
|
+
|
141
|
+
def _resolve_chat_completion(
|
142
|
+
self,
|
143
|
+
request: Dict[str, Any],
|
144
|
+
response: Response,
|
145
|
+
time_elapsed: float,
|
146
|
+
) -> Dict[str, Any]:
|
147
|
+
"""Resolves the request and response objects for `openai.Completion`."""
|
148
|
+
prompt = io.StringIO()
|
149
|
+
for message in request["messages"]:
|
150
|
+
prompt.write(f"\n\n**{message['role']}**: {message['content']}\n")
|
151
|
+
request_str = prompt.getvalue()
|
152
|
+
|
153
|
+
choices = [
|
154
|
+
f"\n\n**{choice['message']['role']}**: {choice['message']['content']}\n"
|
155
|
+
for choice in response["choices"]
|
156
|
+
]
|
157
|
+
|
158
|
+
return self._resolve_metrics(
|
159
|
+
request=request,
|
160
|
+
response=response,
|
161
|
+
request_str=request_str,
|
162
|
+
choices=choices,
|
163
|
+
time_elapsed=time_elapsed,
|
164
|
+
)
|
165
|
+
|
166
|
+
def _resolve_metrics(
|
167
|
+
self,
|
168
|
+
request: Dict[str, Any],
|
169
|
+
response: Response,
|
170
|
+
request_str: str,
|
171
|
+
choices: List[str],
|
172
|
+
time_elapsed: float,
|
173
|
+
) -> Dict[str, Any]:
|
174
|
+
"""Resolves the request and response objects for `openai.Completion`."""
|
175
|
+
results = [
|
176
|
+
trace_tree.Result(
|
177
|
+
inputs={"request": request_str},
|
178
|
+
outputs={"response": choice},
|
179
|
+
)
|
180
|
+
for choice in choices
|
181
|
+
]
|
182
|
+
metrics = self._get_metrics_to_log(request, response, results, time_elapsed)
|
183
|
+
return self._convert_metrics_to_dict(metrics)
|
184
|
+
|
185
|
+
@staticmethod
|
186
|
+
def _get_usage_metrics(response: Response, time_elapsed: float) -> UsageMetrics:
|
187
|
+
"""Gets the usage stats from the response object."""
|
188
|
+
if response.get("usage"):
|
189
|
+
usage_stats = UsageMetrics(**response["usage"])
|
190
|
+
else:
|
191
|
+
usage_stats = UsageMetrics()
|
192
|
+
usage_stats.elapsed_time = time_elapsed
|
193
|
+
return usage_stats
|
194
|
+
|
195
|
+
def _get_metrics_to_log(
|
196
|
+
self,
|
197
|
+
request: Dict[str, Any],
|
198
|
+
response: Response,
|
199
|
+
results: List[Any],
|
200
|
+
time_elapsed: float,
|
201
|
+
) -> Metrics:
|
202
|
+
model = response.get("model") or request.get("model")
|
203
|
+
usage_metrics = self._get_usage_metrics(response, time_elapsed)
|
204
|
+
|
205
|
+
usage = []
|
206
|
+
for result in results:
|
207
|
+
row = {
|
208
|
+
"request": result.inputs["request"],
|
209
|
+
"response": result.outputs["response"],
|
210
|
+
"model": model,
|
211
|
+
"start_time": datetime.datetime.fromtimestamp(response["created"]),
|
212
|
+
"end_time": datetime.datetime.fromtimestamp(
|
213
|
+
response["created"] + time_elapsed
|
214
|
+
),
|
215
|
+
"request_id": response.get("id", None),
|
216
|
+
"api_type": response.get("api_type", "openai"),
|
217
|
+
"session_id": wandb.run.id,
|
218
|
+
}
|
219
|
+
row.update(asdict(usage_metrics))
|
220
|
+
usage.append(row)
|
221
|
+
usage_table = wandb.Table(
|
222
|
+
columns=list(usage[0].keys()),
|
223
|
+
data=[(item.values()) for item in usage],
|
224
|
+
)
|
225
|
+
|
226
|
+
trace = self.results_to_trace_tree(request, response, results, time_elapsed)
|
227
|
+
|
228
|
+
metrics = Metrics(stats=usage_table, trace=trace, usage=usage_metrics)
|
229
|
+
return metrics
|
230
|
+
|
231
|
+
@staticmethod
|
232
|
+
def _convert_metrics_to_dict(metrics: Metrics) -> Dict[str, Any]:
|
233
|
+
"""Converts metrics to a dict."""
|
234
|
+
metrics_dict = {
|
235
|
+
"stats": metrics.stats,
|
236
|
+
"trace": metrics.trace,
|
237
|
+
}
|
238
|
+
usage_stats = {f"usage/{k}": v for k, v in asdict(metrics.usage).items()}
|
239
|
+
metrics_dict.update(usage_stats)
|
240
|
+
return metrics_dict
|
@@ -0,0 +1,299 @@
|
|
1
|
+
"""Prodigy integration for W&B.
|
2
|
+
|
3
|
+
User can upload Prodigy annotated datasets directly
|
4
|
+
from the local database to W&B in Tables format.
|
5
|
+
|
6
|
+
Example usage:
|
7
|
+
|
8
|
+
```python
|
9
|
+
import wandb
|
10
|
+
from wandb.integration.prodigy import upload_dataset
|
11
|
+
|
12
|
+
run = wandb.init(project="prodigy")
|
13
|
+
upload_dataset("name_of_dataset")
|
14
|
+
wandb.finish()
|
15
|
+
```
|
16
|
+
"""
|
17
|
+
|
18
|
+
import base64
|
19
|
+
import collections.abc
|
20
|
+
import io
|
21
|
+
import urllib
|
22
|
+
from copy import deepcopy
|
23
|
+
|
24
|
+
import pandas as pd
|
25
|
+
from PIL import Image
|
26
|
+
|
27
|
+
import wandb
|
28
|
+
from wandb import util
|
29
|
+
from wandb.plot.utils import test_missing
|
30
|
+
from wandb.sdk.lib import telemetry as wb_telemetry
|
31
|
+
|
32
|
+
|
33
|
+
def named_entity(docs):
|
34
|
+
"""Create a named entity visualization.
|
35
|
+
|
36
|
+
Taken from https://github.com/wandb/wandb/blob/main/wandb/plots/named_entity.py.
|
37
|
+
"""
|
38
|
+
spacy = util.get_module(
|
39
|
+
"spacy",
|
40
|
+
required="part_of_speech requires the spacy library, install with `pip install spacy`",
|
41
|
+
)
|
42
|
+
|
43
|
+
util.get_module(
|
44
|
+
"en_core_web_md",
|
45
|
+
required="part_of_speech requires `en_core_web_md` library, install with `python -m spacy download en_core_web_md`",
|
46
|
+
)
|
47
|
+
|
48
|
+
# Test for required packages and missing & non-integer values in docs data
|
49
|
+
if test_missing(docs=docs):
|
50
|
+
html = spacy.displacy.render(
|
51
|
+
docs, style="ent", page=True, minify=True, jupyter=False
|
52
|
+
)
|
53
|
+
wandb_html = wandb.Html(html)
|
54
|
+
return wandb_html
|
55
|
+
|
56
|
+
|
57
|
+
def merge(dict1, dict2):
|
58
|
+
"""Return a new dictionary by merging two dictionaries recursively."""
|
59
|
+
result = deepcopy(dict1)
|
60
|
+
|
61
|
+
for key, value in dict2.items():
|
62
|
+
if isinstance(value, collections.abc.Mapping):
|
63
|
+
result[key] = merge(result.get(key, {}), value)
|
64
|
+
else:
|
65
|
+
result[key] = deepcopy(dict2[key])
|
66
|
+
|
67
|
+
return result
|
68
|
+
|
69
|
+
|
70
|
+
def get_schema(list_data_dict, struct, array_dict_types):
|
71
|
+
"""Get a schema of the dataset's structure and data types."""
|
72
|
+
# Get the structure of the JSON objects in the database
|
73
|
+
# This is similar to getting a JSON schema but with slightly different format
|
74
|
+
for _i, item in enumerate(list_data_dict):
|
75
|
+
# If the list contains dict objects
|
76
|
+
for k, v in item.items():
|
77
|
+
# Check if key already exists in template
|
78
|
+
if k not in struct.keys():
|
79
|
+
if isinstance(v, list):
|
80
|
+
if len(v) > 0 and isinstance(v[0], list):
|
81
|
+
# nested list structure
|
82
|
+
struct[k] = type(v) # type list
|
83
|
+
elif len(v) > 0 and not (
|
84
|
+
isinstance(v[0], list) or isinstance(v[0], dict)
|
85
|
+
):
|
86
|
+
# list of singular values
|
87
|
+
struct[k] = type(v) # type list
|
88
|
+
else:
|
89
|
+
# list of dicts
|
90
|
+
array_dict_types.append(
|
91
|
+
k
|
92
|
+
) # keep track of keys that are type list[dict]
|
93
|
+
struct[k] = {}
|
94
|
+
struct[k] = get_schema(v, struct[k], array_dict_types)
|
95
|
+
elif isinstance(v, dict):
|
96
|
+
struct[k] = {}
|
97
|
+
struct[k] = get_schema([v], struct[k], array_dict_types)
|
98
|
+
else:
|
99
|
+
struct[k] = type(v)
|
100
|
+
else:
|
101
|
+
# Get the value of struct[k] which is the current template
|
102
|
+
# Find new keys and then merge the two templates together
|
103
|
+
cur_struct = struct[k]
|
104
|
+
if isinstance(v, list):
|
105
|
+
if len(v) > 0 and isinstance(v[0], list):
|
106
|
+
# nested list coordinate structure
|
107
|
+
# if the value in the item is currently None, then update
|
108
|
+
if v is not None:
|
109
|
+
struct[k] = type(v) # type list
|
110
|
+
elif len(v) > 0 and not (
|
111
|
+
isinstance(v[0], list) or isinstance(v[0], dict)
|
112
|
+
):
|
113
|
+
# single list with values
|
114
|
+
# if the value in the item is currently None, then update
|
115
|
+
if v is not None:
|
116
|
+
struct[k] = type(v) # type list
|
117
|
+
else:
|
118
|
+
array_dict_types.append(
|
119
|
+
k
|
120
|
+
) # keep track of keys that are type list[dict]
|
121
|
+
struct[k] = {}
|
122
|
+
struct[k] = get_schema(v, struct[k], array_dict_types)
|
123
|
+
# merge cur_struct and struct[k], remove duplicates
|
124
|
+
struct[k] = merge(struct[k], cur_struct)
|
125
|
+
elif isinstance(v, dict):
|
126
|
+
struct[k] = {}
|
127
|
+
struct[k] = get_schema([v], struct[k], array_dict_types)
|
128
|
+
# merge cur_struct and struct[k], remove duplicates
|
129
|
+
struct[k] = merge(struct[k], cur_struct)
|
130
|
+
else:
|
131
|
+
# if the value in the item is currently None, then update
|
132
|
+
if v is not None:
|
133
|
+
struct[k] = type(v)
|
134
|
+
|
135
|
+
return struct
|
136
|
+
|
137
|
+
|
138
|
+
def standardize(item, structure, array_dict_types):
|
139
|
+
"""Standardize all rows/entries in dataset to fit the schema.
|
140
|
+
|
141
|
+
Will look for missing values and fill it in so all rows have
|
142
|
+
the same items and structure.
|
143
|
+
"""
|
144
|
+
for k, v in structure.items():
|
145
|
+
if k not in item:
|
146
|
+
# If the structure/field does not exist
|
147
|
+
if isinstance(v, dict) and (k not in array_dict_types):
|
148
|
+
# If key k is of type dict, and not not a type list[dict]
|
149
|
+
item[k] = {}
|
150
|
+
standardize(item[k], v, array_dict_types)
|
151
|
+
elif isinstance(v, dict) and (k in array_dict_types):
|
152
|
+
# If key k is of type dict, and is actually of type list[dict],
|
153
|
+
# just treat as a list and set to None by default
|
154
|
+
item[k] = None
|
155
|
+
else:
|
156
|
+
# Assign a default type
|
157
|
+
item[k] = v()
|
158
|
+
else:
|
159
|
+
# If the structure/field already exists and is a list or dict
|
160
|
+
if isinstance(item[k], list):
|
161
|
+
# ignore if item is a nested list structure or list of non-dicts
|
162
|
+
condition = (
|
163
|
+
not (len(item[k]) > 0 and isinstance(item[k][0], list))
|
164
|
+
) and (
|
165
|
+
not (
|
166
|
+
len(item[k]) > 0
|
167
|
+
and not (
|
168
|
+
isinstance(item[k][0], list) or isinstance(item[k][0], dict)
|
169
|
+
)
|
170
|
+
)
|
171
|
+
)
|
172
|
+
if condition:
|
173
|
+
for sub_item in item[k]:
|
174
|
+
standardize(sub_item, v, array_dict_types)
|
175
|
+
elif isinstance(item[k], dict):
|
176
|
+
standardize(item[k], v, array_dict_types)
|
177
|
+
|
178
|
+
|
179
|
+
def create_table(data):
|
180
|
+
"""Create a W&B Table.
|
181
|
+
|
182
|
+
- Create/decode images from URL/Base64
|
183
|
+
- Uses spacy to translate NER span data to visualizations.
|
184
|
+
"""
|
185
|
+
# create table object from columns
|
186
|
+
table_df = pd.DataFrame(data)
|
187
|
+
columns = list(table_df.columns)
|
188
|
+
if ("spans" in table_df.columns) and ("text" in table_df.columns):
|
189
|
+
columns.append("spans_visual")
|
190
|
+
if "image" in columns:
|
191
|
+
columns.append("image_visual")
|
192
|
+
main_table = wandb.Table(columns=columns)
|
193
|
+
|
194
|
+
# Convert to dictionary format to maintain order during processing
|
195
|
+
matrix = table_df.to_dict(orient="records")
|
196
|
+
|
197
|
+
# Import en_core_web_md if exists
|
198
|
+
en_core_web_md = util.get_module(
|
199
|
+
"en_core_web_md",
|
200
|
+
required="part_of_speech requires `en_core_web_md` library, install with `python -m spacy download en_core_web_md`",
|
201
|
+
)
|
202
|
+
nlp = en_core_web_md.load(disable=["ner"])
|
203
|
+
|
204
|
+
# Go through each individual row
|
205
|
+
for _i, document in enumerate(matrix):
|
206
|
+
# Text NER span visualizations
|
207
|
+
if ("spans_visual" in columns) and ("text" in columns):
|
208
|
+
# Add visuals for spans
|
209
|
+
document["spans_visual"] = None
|
210
|
+
doc = nlp(document["text"])
|
211
|
+
ents = []
|
212
|
+
if ("spans" in document) and (document["spans"] is not None):
|
213
|
+
for span in document["spans"]:
|
214
|
+
if ("start" in span) and ("end" in span) and ("label" in span):
|
215
|
+
charspan = doc.char_span(
|
216
|
+
span["start"], span["end"], span["label"]
|
217
|
+
)
|
218
|
+
ents.append(charspan)
|
219
|
+
doc.ents = ents
|
220
|
+
document["spans_visual"] = named_entity(docs=doc)
|
221
|
+
|
222
|
+
# Convert image link to wandb Image
|
223
|
+
if "image" in columns:
|
224
|
+
# Turn into wandb image
|
225
|
+
document["image_visual"] = None
|
226
|
+
if ("image" in document) and (document["image"] is not None):
|
227
|
+
isurl = urllib.parse.urlparse(document["image"]).scheme in (
|
228
|
+
"http",
|
229
|
+
"https",
|
230
|
+
)
|
231
|
+
isbase64 = ("data:" in document["image"]) and (
|
232
|
+
";base64" in document["image"]
|
233
|
+
)
|
234
|
+
if isurl:
|
235
|
+
# is url
|
236
|
+
try:
|
237
|
+
im = Image.open(urllib.request.urlopen(document["image"]))
|
238
|
+
document["image_visual"] = wandb.Image(im)
|
239
|
+
except urllib.error.URLError:
|
240
|
+
print(
|
241
|
+
"Warning: Image URL "
|
242
|
+
+ str(document["image"])
|
243
|
+
+ " is invalid."
|
244
|
+
)
|
245
|
+
document["image_visual"] = None
|
246
|
+
elif isbase64:
|
247
|
+
# is base64 uri
|
248
|
+
imgb64 = document["image"].split("base64,")[1]
|
249
|
+
try:
|
250
|
+
msg = base64.b64decode(imgb64)
|
251
|
+
buf = io.BytesIO(msg)
|
252
|
+
im = Image.open(buf)
|
253
|
+
document["image_visual"] = wandb.Image(im)
|
254
|
+
except base64.binascii.Error:
|
255
|
+
print(
|
256
|
+
"Warning: Base64 string "
|
257
|
+
+ str(document["image"])
|
258
|
+
+ " is invalid."
|
259
|
+
)
|
260
|
+
document["image_visual"] = None
|
261
|
+
else:
|
262
|
+
# is data path
|
263
|
+
document["image_visual"] = wandb.Image(document["image"])
|
264
|
+
|
265
|
+
# Create row and append to table
|
266
|
+
values_list = list(document.values())
|
267
|
+
main_table.add_data(*values_list)
|
268
|
+
return main_table
|
269
|
+
|
270
|
+
|
271
|
+
def upload_dataset(dataset_name):
|
272
|
+
"""Upload dataset from local database to Weights & Biases.
|
273
|
+
|
274
|
+
Args:
|
275
|
+
dataset_name: The name of the dataset in the Prodigy database.
|
276
|
+
"""
|
277
|
+
# Check if wandb.init has been called
|
278
|
+
if wandb.run is None:
|
279
|
+
raise ValueError("You must call wandb.init() before upload_dataset()")
|
280
|
+
|
281
|
+
with wb_telemetry.context(run=wandb.run) as tel:
|
282
|
+
tel.feature.prodigy = True
|
283
|
+
|
284
|
+
prodigy_db = util.get_module(
|
285
|
+
"prodigy.components.db",
|
286
|
+
required="`prodigy` library is required but not installed. Please see https://prodi.gy/docs/install",
|
287
|
+
)
|
288
|
+
# Retrieve and upload prodigy dataset
|
289
|
+
database = prodigy_db.connect()
|
290
|
+
data = database.get_dataset(dataset_name)
|
291
|
+
|
292
|
+
array_dict_types = []
|
293
|
+
schema = get_schema(data, {}, array_dict_types)
|
294
|
+
|
295
|
+
for i, _d in enumerate(data):
|
296
|
+
standardize(data[i], schema, array_dict_types)
|
297
|
+
table = create_table(data)
|
298
|
+
wandb.log({dataset_name: table})
|
299
|
+
print("Prodigy dataset `" + dataset_name + "` uploaded.")
|
@@ -0,0 +1,117 @@
|
|
1
|
+
import warnings
|
2
|
+
|
3
|
+
import numpy
|
4
|
+
from sacred.dependencies import get_digest
|
5
|
+
from sacred.observers import RunObserver
|
6
|
+
|
7
|
+
import wandb
|
8
|
+
|
9
|
+
|
10
|
+
class WandbObserver(RunObserver):
|
11
|
+
"""Log sacred experiment data to W&B.
|
12
|
+
|
13
|
+
Arguments:
|
14
|
+
Accepts all the arguments accepted by wandb.init().
|
15
|
+
|
16
|
+
name — A display name for this run, which shows up in the UI and is editable, doesn't have to be unique
|
17
|
+
notes — A multiline string description associated with the run
|
18
|
+
config — a dictionary-like object to set as initial config
|
19
|
+
project — the name of the project to which this run will belong
|
20
|
+
tags — a list of strings to associate with this run as tags
|
21
|
+
dir — the path to a directory where artifacts will be written (default: ./wandb)
|
22
|
+
entity — the team posting this run (default: your username or your default team)
|
23
|
+
job_type — the type of job you are logging, e.g. eval, worker, ps (default: training)
|
24
|
+
save_code — save the main python or notebook file to wandb to enable diffing (default: editable from your settings page)
|
25
|
+
group — a string by which to group other runs; see Grouping
|
26
|
+
reinit — whether to allow multiple calls to wandb.init in the same process (default: False)
|
27
|
+
id — A unique ID for this run primarily used for Resuming. It must be globally unique, and if you delete a run you can't reuse the ID. Use the name field for a descriptive, useful name for the run. The ID cannot contain special characters.
|
28
|
+
resume — if set to True, the run auto resumes; can also be a unique string for manual resuming; see Resuming (default: False)
|
29
|
+
anonymous — can be "allow", "never", or "must". This enables or explicitly disables anonymous logging. (default: never)
|
30
|
+
force — whether to force a user to be logged into wandb when running a script (default: False)
|
31
|
+
magic — (bool, dict, or str, optional): magic configuration as bool, dict, json string, yaml filename. If set to True will attempt to auto-instrument your script. (default: None)
|
32
|
+
sync_tensorboard — A boolean indicating whether or not copy all TensorBoard logs wandb; see Tensorboard (default: False)
|
33
|
+
monitor_gym — A boolean indicating whether or not to log videos generated by OpenAI Gym; see Ray Tune (default: False)
|
34
|
+
allow_val_change — whether to allow wandb.config values to change, by default we throw an exception if config values are overwritten. (default: False)
|
35
|
+
|
36
|
+
Examples:
|
37
|
+
Create sacred experiment::
|
38
|
+
from wandb.sacred import WandbObserver
|
39
|
+
ex.observers.append(WandbObserver(project='sacred_test',
|
40
|
+
name='test1'))
|
41
|
+
@ex.config
|
42
|
+
def cfg():
|
43
|
+
C = 1.0
|
44
|
+
gamma = 0.7
|
45
|
+
@ex.automain
|
46
|
+
def run(C, gamma, _run):
|
47
|
+
iris = datasets.load_iris()
|
48
|
+
per = permutation(iris.target.size)
|
49
|
+
iris.data = iris.data[per]
|
50
|
+
iris.target = iris.target[per]
|
51
|
+
clf = svm.SVC(C, 'rbf', gamma=gamma)
|
52
|
+
clf.fit(iris.data[:90],
|
53
|
+
iris.target[:90])
|
54
|
+
return clf.score(iris.data[90:],
|
55
|
+
iris.target[90:])
|
56
|
+
"""
|
57
|
+
|
58
|
+
def __init__(self, **kwargs):
|
59
|
+
self.run = wandb.init(**kwargs)
|
60
|
+
self.resources = {}
|
61
|
+
|
62
|
+
def started_event(
|
63
|
+
self, ex_info, command, host_info, start_time, config, meta_info, _id
|
64
|
+
):
|
65
|
+
# TODO: add the source code file
|
66
|
+
# TODO: add dependencies and metadata.
|
67
|
+
self.__update_config(config)
|
68
|
+
|
69
|
+
def completed_event(self, stop_time, result):
|
70
|
+
if result:
|
71
|
+
if not isinstance(result, tuple):
|
72
|
+
result = (
|
73
|
+
result,
|
74
|
+
) # transform single result to tuple so that both single & multiple results use same code
|
75
|
+
|
76
|
+
for i, r in enumerate(result):
|
77
|
+
if isinstance(r, float) or isinstance(r, int):
|
78
|
+
wandb.log({f"result_{i}": float(r)})
|
79
|
+
elif isinstance(r, dict):
|
80
|
+
wandb.log(r)
|
81
|
+
elif isinstance(r, object):
|
82
|
+
artifact = wandb.Artifact(f"result_{i}.pkl", type="result")
|
83
|
+
artifact.add_file(r)
|
84
|
+
self.run.log_artifact(artifact)
|
85
|
+
elif isinstance(r, numpy.ndarray):
|
86
|
+
wandb.log({f"result_{i}": wandb.Image(r)})
|
87
|
+
else:
|
88
|
+
warnings.warn(
|
89
|
+
f"logging results does not support type '{type(r)}' results. Ignoring this result",
|
90
|
+
stacklevel=2,
|
91
|
+
)
|
92
|
+
|
93
|
+
def artifact_event(self, name, filename, metadata=None, content_type=None):
|
94
|
+
if content_type is None:
|
95
|
+
content_type = "file"
|
96
|
+
artifact = wandb.Artifact(name, type=content_type)
|
97
|
+
artifact.add_file(filename)
|
98
|
+
self.run.log_artifact(artifact)
|
99
|
+
|
100
|
+
def resource_event(self, filename):
|
101
|
+
"""TODO: Maintain resources list."""
|
102
|
+
if filename not in self.resources:
|
103
|
+
md5 = get_digest(filename)
|
104
|
+
self.resources[filename] = md5
|
105
|
+
|
106
|
+
def log_metrics(self, metrics_by_name, info):
|
107
|
+
for metric_name, metric_ptr in metrics_by_name.items():
|
108
|
+
for _step, value in zip(metric_ptr["steps"], metric_ptr["values"]):
|
109
|
+
if isinstance(value, numpy.ndarray):
|
110
|
+
wandb.log({metric_name: wandb.Image(value)})
|
111
|
+
else:
|
112
|
+
wandb.log({metric_name: value})
|
113
|
+
|
114
|
+
def __update_config(self, config):
|
115
|
+
for k, v in config.items():
|
116
|
+
self.run.config[k] = v
|
117
|
+
self.run.config["resources"] = []
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"""wandb integration sagemaker module."""
|
2
|
+
|
3
|
+
from .auth import sagemaker_auth
|
4
|
+
from .config import parse_sm_config
|
5
|
+
from .resources import parse_sm_resources, parse_sm_secrets
|
6
|
+
|
7
|
+
__all__ = [
|
8
|
+
"sagemaker_auth",
|
9
|
+
"parse_sm_config",
|
10
|
+
"parse_sm_secrets",
|
11
|
+
"parse_sm_resources",
|
12
|
+
]
|