wandb 0.18.2__py3-none-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package_readme.md +89 -0
- wandb/__init__.py +245 -0
- wandb/__init__.pyi +1139 -0
- wandb/__main__.py +3 -0
- wandb/_globals.py +19 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +363 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +266 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +40 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +385 -0
- wandb/apis/importers/internals/protocols.py +99 -0
- wandb/apis/importers/internals/util.py +78 -0
- wandb/apis/importers/mlflow.py +254 -0
- wandb/apis/importers/validation.py +108 -0
- wandb/apis/importers/wandb.py +1603 -0
- wandb/apis/internal.py +232 -0
- wandb/apis/normalize.py +89 -0
- wandb/apis/paginator.py +81 -0
- wandb/apis/public/__init__.py +34 -0
- wandb/apis/public/api.py +1305 -0
- wandb/apis/public/artifacts.py +1090 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +195 -0
- wandb/apis/public/history.py +149 -0
- wandb/apis/public/jobs.py +659 -0
- wandb/apis/public/projects.py +154 -0
- wandb/apis/public/query_generator.py +166 -0
- wandb/apis/public/reports.py +469 -0
- wandb/apis/public/runs.py +914 -0
- wandb/apis/public/sweeps.py +240 -0
- wandb/apis/public/teams.py +198 -0
- wandb/apis/public/users.py +136 -0
- wandb/apis/reports/__init__.py +1 -0
- wandb/apis/reports/v1/__init__.py +8 -0
- wandb/apis/reports/v2/__init__.py +8 -0
- wandb/apis/workspaces/__init__.py +8 -0
- wandb/beta/workflows.py +288 -0
- wandb/bin/nvidia_gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/cli.py +3004 -0
- wandb/data_types.py +63 -0
- wandb/docker/__init__.py +342 -0
- wandb/docker/auth.py +436 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/docker/www_authenticate.py +94 -0
- wandb/env.py +514 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +37 -0
- wandb/errors/term.py +103 -0
- wandb/errors/util.py +57 -0
- wandb/errors/warnings.py +2 -0
- wandb/filesync/__init__.py +0 -0
- wandb/filesync/dir_watcher.py +403 -0
- wandb/filesync/stats.py +100 -0
- wandb/filesync/step_checksum.py +142 -0
- wandb/filesync/step_prepare.py +179 -0
- wandb/filesync/step_upload.py +290 -0
- wandb/filesync/upload_job.py +142 -0
- wandb/integration/__init__.py +0 -0
- wandb/integration/catboost/__init__.py +5 -0
- wandb/integration/catboost/catboost.py +178 -0
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/diffusers/__init__.py +3 -0
- wandb/integration/diffusers/autologger.py +76 -0
- wandb/integration/diffusers/pipeline_resolver.py +50 -0
- wandb/integration/diffusers/resolvers/__init__.py +9 -0
- wandb/integration/diffusers/resolvers/multimodal.py +882 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +249 -0
- wandb/integration/gym/__init__.py +105 -0
- wandb/integration/huggingface/__init__.py +3 -0
- wandb/integration/huggingface/huggingface.py +18 -0
- wandb/integration/huggingface/resolver.py +213 -0
- wandb/integration/keras/__init__.py +11 -0
- wandb/integration/keras/callbacks/__init__.py +5 -0
- wandb/integration/keras/callbacks/metrics_logger.py +136 -0
- wandb/integration/keras/callbacks/model_checkpoint.py +195 -0
- wandb/integration/keras/callbacks/tables_builder.py +226 -0
- wandb/integration/keras/keras.py +1091 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +324 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +48 -0
- wandb/integration/lightgbm/__init__.py +239 -0
- wandb/integration/lightning/__init__.py +0 -0
- wandb/integration/lightning/fabric/__init__.py +3 -0
- wandb/integration/lightning/fabric/logger.py +762 -0
- wandb/integration/magic.py +556 -0
- wandb/integration/metaflow/__init__.py +3 -0
- wandb/integration/metaflow/metaflow.py +383 -0
- wandb/integration/openai/__init__.py +3 -0
- wandb/integration/openai/fine_tuning.py +480 -0
- wandb/integration/openai/openai.py +22 -0
- wandb/integration/openai/resolver.py +240 -0
- wandb/integration/prodigy/__init__.py +3 -0
- wandb/integration/prodigy/prodigy.py +299 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +12 -0
- wandb/integration/sagemaker/auth.py +28 -0
- wandb/integration/sagemaker/config.py +49 -0
- wandb/integration/sagemaker/files.py +3 -0
- wandb/integration/sagemaker/resources.py +34 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +153 -0
- wandb/integration/sklearn/__init__.py +37 -0
- wandb/integration/sklearn/calculate/__init__.py +32 -0
- wandb/integration/sklearn/calculate/calibration_curves.py +125 -0
- wandb/integration/sklearn/calculate/class_proportions.py +68 -0
- wandb/integration/sklearn/calculate/confusion_matrix.py +93 -0
- wandb/integration/sklearn/calculate/decision_boundaries.py +40 -0
- wandb/integration/sklearn/calculate/elbow_curve.py +55 -0
- wandb/integration/sklearn/calculate/feature_importances.py +67 -0
- wandb/integration/sklearn/calculate/learning_curve.py +64 -0
- wandb/integration/sklearn/calculate/outlier_candidates.py +69 -0
- wandb/integration/sklearn/calculate/residuals.py +86 -0
- wandb/integration/sklearn/calculate/silhouette.py +118 -0
- wandb/integration/sklearn/calculate/summary_metrics.py +62 -0
- wandb/integration/sklearn/plot/__init__.py +35 -0
- wandb/integration/sklearn/plot/classifier.py +329 -0
- wandb/integration/sklearn/plot/clusterer.py +146 -0
- wandb/integration/sklearn/plot/regressor.py +121 -0
- wandb/integration/sklearn/plot/shared.py +91 -0
- wandb/integration/sklearn/utils.py +183 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +355 -0
- wandb/integration/tensorboard/monkeypatch.py +185 -0
- wandb/integration/tensorflow/__init__.py +5 -0
- wandb/integration/tensorflow/estimator_hook.py +54 -0
- wandb/integration/torch/__init__.py +0 -0
- wandb/integration/torch/wandb_torch.py +554 -0
- wandb/integration/ultralytics/__init__.py +11 -0
- wandb/integration/ultralytics/bbox_utils.py +208 -0
- wandb/integration/ultralytics/callback.py +524 -0
- wandb/integration/ultralytics/classification_utils.py +83 -0
- wandb/integration/ultralytics/mask_utils.py +202 -0
- wandb/integration/ultralytics/pose_utils.py +103 -0
- wandb/integration/xgboost/__init__.py +11 -0
- wandb/integration/xgboost/xgboost.py +189 -0
- wandb/integration/yolov8/__init__.py +0 -0
- wandb/integration/yolov8/yolov8.py +284 -0
- wandb/jupyter.py +515 -0
- wandb/magic.py +3 -0
- wandb/mpmain/__init__.py +0 -0
- wandb/mpmain/__main__.py +1 -0
- wandb/old/__init__.py +0 -0
- wandb/old/core.py +53 -0
- wandb/old/settings.py +173 -0
- wandb/old/summary.py +440 -0
- wandb/plot/__init__.py +19 -0
- wandb/plot/bar.py +45 -0
- wandb/plot/confusion_matrix.py +100 -0
- wandb/plot/histogram.py +39 -0
- wandb/plot/line.py +43 -0
- wandb/plot/line_series.py +88 -0
- wandb/plot/pr_curve.py +136 -0
- wandb/plot/roc_curve.py +118 -0
- wandb/plot/scatter.py +32 -0
- wandb/plot/utils.py +183 -0
- wandb/plot/viz.py +123 -0
- wandb/proto/__init__.py +0 -0
- wandb/proto/v3/__init__.py +0 -0
- wandb/proto/v3/wandb_base_pb2.py +55 -0
- wandb/proto/v3/wandb_internal_pb2.py +1608 -0
- wandb/proto/v3/wandb_server_pb2.py +208 -0
- wandb/proto/v3/wandb_settings_pb2.py +112 -0
- wandb/proto/v3/wandb_telemetry_pb2.py +106 -0
- wandb/proto/v4/__init__.py +0 -0
- wandb/proto/v4/wandb_base_pb2.py +30 -0
- wandb/proto/v4/wandb_internal_pb2.py +360 -0
- wandb/proto/v4/wandb_server_pb2.py +63 -0
- wandb/proto/v4/wandb_settings_pb2.py +45 -0
- wandb/proto/v4/wandb_telemetry_pb2.py +41 -0
- wandb/proto/v5/wandb_base_pb2.py +31 -0
- wandb/proto/v5/wandb_internal_pb2.py +361 -0
- wandb/proto/v5/wandb_server_pb2.py +64 -0
- wandb/proto/v5/wandb_settings_pb2.py +46 -0
- wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
- wandb/proto/wandb_base_pb2.py +10 -0
- wandb/proto/wandb_deprecated.py +53 -0
- wandb/proto/wandb_generate_deprecated.py +34 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +16 -0
- wandb/proto/wandb_server_pb2.py +10 -0
- wandb/proto/wandb_settings_pb2.py +10 -0
- wandb/proto/wandb_telemetry_pb2.py +10 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_validators.py +90 -0
- wandb/sdk/artifacts/artifact.py +2389 -0
- wandb/sdk/artifacts/artifact_download_logger.py +43 -0
- wandb/sdk/artifacts/artifact_file_cache.py +253 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +74 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
- wandb/sdk/artifacts/artifact_saver.py +269 -0
- wandb/sdk/artifacts/artifact_state.py +11 -0
- wandb/sdk/artifacts/artifact_ttl.py +7 -0
- wandb/sdk/artifacts/exceptions.py +57 -0
- wandb/sdk/artifacts/staging.py +25 -0
- wandb/sdk/artifacts/storage_handler.py +62 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +208 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +228 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +141 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +300 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
- wandb/sdk/artifacts/storage_policies/register.py +1 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
- wandb/sdk/artifacts/storage_policy.py +72 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +222 -0
- wandb/sdk/data_types/__init__.py +0 -0
- wandb/sdk/data_types/_dtypes.py +914 -0
- wandb/sdk/data_types/_private.py +10 -0
- wandb/sdk/data_types/audio.py +165 -0
- wandb/sdk/data_types/base_types/__init__.py +0 -0
- wandb/sdk/data_types/base_types/json_metadata.py +55 -0
- wandb/sdk/data_types/base_types/media.py +315 -0
- wandb/sdk/data_types/base_types/wb_value.py +272 -0
- wandb/sdk/data_types/bokeh.py +70 -0
- wandb/sdk/data_types/graph.py +405 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +295 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +235 -0
- wandb/sdk/data_types/histogram.py +96 -0
- wandb/sdk/data_types/html.py +115 -0
- wandb/sdk/data_types/image.py +845 -0
- wandb/sdk/data_types/molecule.py +241 -0
- wandb/sdk/data_types/object_3d.py +474 -0
- wandb/sdk/data_types/plotly.py +82 -0
- wandb/sdk/data_types/saved_model.py +446 -0
- wandb/sdk/data_types/table.py +1204 -0
- wandb/sdk/data_types/trace_tree.py +438 -0
- wandb/sdk/data_types/utils.py +229 -0
- wandb/sdk/data_types/video.py +247 -0
- wandb/sdk/integration_utils/__init__.py +0 -0
- wandb/sdk/integration_utils/auto_logging.py +239 -0
- wandb/sdk/integration_utils/data_logging.py +475 -0
- wandb/sdk/interface/__init__.py +0 -0
- wandb/sdk/interface/constants.py +4 -0
- wandb/sdk/interface/interface.py +972 -0
- wandb/sdk/interface/interface_queue.py +59 -0
- wandb/sdk/interface/interface_relay.py +53 -0
- wandb/sdk/interface/interface_shared.py +537 -0
- wandb/sdk/interface/interface_sock.py +61 -0
- wandb/sdk/interface/message_future.py +27 -0
- wandb/sdk/interface/message_future_poll.py +50 -0
- wandb/sdk/interface/router.py +118 -0
- wandb/sdk/interface/router_queue.py +44 -0
- wandb/sdk/interface/router_relay.py +39 -0
- wandb/sdk/interface/router_sock.py +36 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +297 -0
- wandb/sdk/internal/file_pusher.py +181 -0
- wandb/sdk/internal/file_stream.py +695 -0
- wandb/sdk/internal/flow_control.py +263 -0
- wandb/sdk/internal/handler.py +901 -0
- wandb/sdk/internal/internal.py +417 -0
- wandb/sdk/internal/internal_api.py +4358 -0
- wandb/sdk/internal/internal_util.py +100 -0
- wandb/sdk/internal/job_builder.py +629 -0
- wandb/sdk/internal/profiler.py +78 -0
- wandb/sdk/internal/progress.py +83 -0
- wandb/sdk/internal/run.py +25 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1686 -0
- wandb/sdk/internal/sender_config.py +197 -0
- wandb/sdk/internal/settings_static.py +90 -0
- wandb/sdk/internal/system/__init__.py +0 -0
- wandb/sdk/internal/system/assets/__init__.py +27 -0
- wandb/sdk/internal/system/assets/aggregators.py +37 -0
- wandb/sdk/internal/system/assets/asset_registry.py +20 -0
- wandb/sdk/internal/system/assets/cpu.py +163 -0
- wandb/sdk/internal/system/assets/disk.py +210 -0
- wandb/sdk/internal/system/assets/gpu.py +416 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +239 -0
- wandb/sdk/internal/system/assets/gpu_apple.py +177 -0
- wandb/sdk/internal/system/assets/interfaces.py +207 -0
- wandb/sdk/internal/system/assets/ipu.py +177 -0
- wandb/sdk/internal/system/assets/memory.py +166 -0
- wandb/sdk/internal/system/assets/network.py +125 -0
- wandb/sdk/internal/system/assets/open_metrics.py +299 -0
- wandb/sdk/internal/system/assets/tpu.py +154 -0
- wandb/sdk/internal/system/assets/trainium.py +399 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +249 -0
- wandb/sdk/internal/system/system_monitor.py +229 -0
- wandb/sdk/internal/tb_watcher.py +518 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/internal/writer.py +206 -0
- wandb/sdk/launch/__init__.py +14 -0
- wandb/sdk/launch/_launch.py +330 -0
- wandb/sdk/launch/_launch_add.py +255 -0
- wandb/sdk/launch/_project_spec.py +566 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +924 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +53 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +297 -0
- wandb/sdk/launch/builder/context_manager.py +235 -0
- wandb/sdk/launch/builder/docker_builder.py +177 -0
- wandb/sdk/launch/builder/kaniko_builder.py +595 -0
- wandb/sdk/launch/builder/noop.py +58 -0
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
- wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
- wandb/sdk/launch/create_job.py +528 -0
- wandb/sdk/launch/environment/abstract.py +29 -0
- wandb/sdk/launch/environment/aws_environment.py +322 -0
- wandb/sdk/launch/environment/azure_environment.py +105 -0
- wandb/sdk/launch/environment/gcp_environment.py +335 -0
- wandb/sdk/launch/environment/local_environment.py +66 -0
- wandb/sdk/launch/errors.py +19 -0
- wandb/sdk/launch/git_reference.py +109 -0
- wandb/sdk/launch/inputs/files.py +148 -0
- wandb/sdk/launch/inputs/internal.py +315 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/loader.py +249 -0
- wandb/sdk/launch/registry/abstract.py +48 -0
- wandb/sdk/launch/registry/anon.py +29 -0
- wandb/sdk/launch/registry/azure_container_registry.py +124 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
- wandb/sdk/launch/registry/local_registry.py +67 -0
- wandb/sdk/launch/runner/__init__.py +0 -0
- wandb/sdk/launch/runner/abstract.py +195 -0
- wandb/sdk/launch/runner/kubernetes_monitor.py +474 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
- wandb/sdk/launch/runner/local_container.py +301 -0
- wandb/sdk/launch/runner/local_process.py +78 -0
- wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
- wandb/sdk/launch/runner/vertex_runner.py +230 -0
- wandb/sdk/launch/sweeps/__init__.py +39 -0
- wandb/sdk/launch/sweeps/scheduler.py +742 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +91 -0
- wandb/sdk/launch/sweeps/utils.py +316 -0
- wandb/sdk/launch/utils.py +746 -0
- wandb/sdk/launch/wandb_reference.py +138 -0
- wandb/sdk/lib/__init__.py +5 -0
- wandb/sdk/lib/_settings_toposort_generate.py +159 -0
- wandb/sdk/lib/_settings_toposort_generated.py +250 -0
- wandb/sdk/lib/_wburls_generate.py +25 -0
- wandb/sdk/lib/_wburls_generated.py +22 -0
- wandb/sdk/lib/apikey.py +273 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +42 -0
- wandb/sdk/lib/disabled.py +29 -0
- wandb/sdk/lib/exit_hooks.py +54 -0
- wandb/sdk/lib/file_stream_utils.py +118 -0
- wandb/sdk/lib/filenames.py +64 -0
- wandb/sdk/lib/filesystem.py +372 -0
- wandb/sdk/lib/fsm.py +174 -0
- wandb/sdk/lib/gitlib.py +239 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +84 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/ipython.py +146 -0
- wandb/sdk/lib/json_util.py +80 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/mailbox.py +460 -0
- wandb/sdk/lib/module.py +69 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +313 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +845 -0
- wandb/sdk/lib/reporting.py +99 -0
- wandb/sdk/lib/retry.py +289 -0
- wandb/sdk/lib/run_moment.py +78 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +52 -0
- wandb/sdk/lib/service_connection.py +216 -0
- wandb/sdk/lib/service_token.py +94 -0
- wandb/sdk/lib/sock_client.py +295 -0
- wandb/sdk/lib/sparkline.py +45 -0
- wandb/sdk/lib/telemetry.py +100 -0
- wandb/sdk/lib/timed_input.py +133 -0
- wandb/sdk/lib/timer.py +19 -0
- wandb/sdk/lib/tracelog.py +255 -0
- wandb/sdk/lib/wburls.py +46 -0
- wandb/sdk/service/__init__.py +0 -0
- wandb/sdk/service/_startup_debug.py +22 -0
- wandb/sdk/service/port_file.py +53 -0
- wandb/sdk/service/server.py +116 -0
- wandb/sdk/service/server_sock.py +276 -0
- wandb/sdk/service/service.py +242 -0
- wandb/sdk/service/streams.py +417 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +501 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +322 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1266 -0
- wandb/sdk/wandb_login.py +349 -0
- wandb/sdk/wandb_metric.py +110 -0
- wandb/sdk/wandb_require.py +97 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4236 -0
- wandb/sdk/wandb_settings.py +2001 -0
- wandb/sdk/wandb_setup.py +409 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +119 -0
- wandb/sdk/wandb_sync.py +81 -0
- wandb/sdk/wandb_watch.py +144 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +443 -0
- wandb/trigger.py +29 -0
- wandb/util.py +1956 -0
- wandb/vendor/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/setup.py +40 -0
- wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
- wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
- wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
- wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
- wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
- wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
- wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
- wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
- wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
- wandb/vendor/graphql-core-1.1/setup.py +86 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
- wandb/vendor/promise-2.3.0/conftest.py +30 -0
- wandb/vendor/promise-2.3.0/setup.py +64 -0
- wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
- wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
- wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
- wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
- wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
- wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
- wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
- wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
- wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
- wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
- wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
- wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
- wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
- wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
- wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
- wandb/vendor/pygments/__init__.py +90 -0
- wandb/vendor/pygments/cmdline.py +568 -0
- wandb/vendor/pygments/console.py +74 -0
- wandb/vendor/pygments/filter.py +74 -0
- wandb/vendor/pygments/filters/__init__.py +350 -0
- wandb/vendor/pygments/formatter.py +95 -0
- wandb/vendor/pygments/formatters/__init__.py +153 -0
- wandb/vendor/pygments/formatters/_mapping.py +85 -0
- wandb/vendor/pygments/formatters/bbcode.py +109 -0
- wandb/vendor/pygments/formatters/html.py +851 -0
- wandb/vendor/pygments/formatters/img.py +600 -0
- wandb/vendor/pygments/formatters/irc.py +182 -0
- wandb/vendor/pygments/formatters/latex.py +482 -0
- wandb/vendor/pygments/formatters/other.py +160 -0
- wandb/vendor/pygments/formatters/rtf.py +147 -0
- wandb/vendor/pygments/formatters/svg.py +153 -0
- wandb/vendor/pygments/formatters/terminal.py +136 -0
- wandb/vendor/pygments/formatters/terminal256.py +309 -0
- wandb/vendor/pygments/lexer.py +871 -0
- wandb/vendor/pygments/lexers/__init__.py +329 -0
- wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
- wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
- wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
- wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
- wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
- wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
- wandb/vendor/pygments/lexers/_mapping.py +500 -0
- wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
- wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
- wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
- wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
- wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
- wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
- wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
- wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
- wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
- wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
- wandb/vendor/pygments/lexers/actionscript.py +240 -0
- wandb/vendor/pygments/lexers/agile.py +24 -0
- wandb/vendor/pygments/lexers/algebra.py +221 -0
- wandb/vendor/pygments/lexers/ambient.py +76 -0
- wandb/vendor/pygments/lexers/ampl.py +87 -0
- wandb/vendor/pygments/lexers/apl.py +101 -0
- wandb/vendor/pygments/lexers/archetype.py +318 -0
- wandb/vendor/pygments/lexers/asm.py +641 -0
- wandb/vendor/pygments/lexers/automation.py +374 -0
- wandb/vendor/pygments/lexers/basic.py +500 -0
- wandb/vendor/pygments/lexers/bibtex.py +160 -0
- wandb/vendor/pygments/lexers/business.py +612 -0
- wandb/vendor/pygments/lexers/c_cpp.py +252 -0
- wandb/vendor/pygments/lexers/c_like.py +541 -0
- wandb/vendor/pygments/lexers/capnproto.py +78 -0
- wandb/vendor/pygments/lexers/chapel.py +102 -0
- wandb/vendor/pygments/lexers/clean.py +288 -0
- wandb/vendor/pygments/lexers/compiled.py +34 -0
- wandb/vendor/pygments/lexers/configs.py +833 -0
- wandb/vendor/pygments/lexers/console.py +114 -0
- wandb/vendor/pygments/lexers/crystal.py +393 -0
- wandb/vendor/pygments/lexers/csound.py +366 -0
- wandb/vendor/pygments/lexers/css.py +689 -0
- wandb/vendor/pygments/lexers/d.py +251 -0
- wandb/vendor/pygments/lexers/dalvik.py +125 -0
- wandb/vendor/pygments/lexers/data.py +555 -0
- wandb/vendor/pygments/lexers/diff.py +165 -0
- wandb/vendor/pygments/lexers/dotnet.py +691 -0
- wandb/vendor/pygments/lexers/dsls.py +878 -0
- wandb/vendor/pygments/lexers/dylan.py +289 -0
- wandb/vendor/pygments/lexers/ecl.py +125 -0
- wandb/vendor/pygments/lexers/eiffel.py +65 -0
- wandb/vendor/pygments/lexers/elm.py +121 -0
- wandb/vendor/pygments/lexers/erlang.py +533 -0
- wandb/vendor/pygments/lexers/esoteric.py +277 -0
- wandb/vendor/pygments/lexers/ezhil.py +69 -0
- wandb/vendor/pygments/lexers/factor.py +344 -0
- wandb/vendor/pygments/lexers/fantom.py +250 -0
- wandb/vendor/pygments/lexers/felix.py +273 -0
- wandb/vendor/pygments/lexers/forth.py +177 -0
- wandb/vendor/pygments/lexers/fortran.py +205 -0
- wandb/vendor/pygments/lexers/foxpro.py +428 -0
- wandb/vendor/pygments/lexers/functional.py +21 -0
- wandb/vendor/pygments/lexers/go.py +101 -0
- wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
- wandb/vendor/pygments/lexers/graph.py +80 -0
- wandb/vendor/pygments/lexers/graphics.py +553 -0
- wandb/vendor/pygments/lexers/haskell.py +843 -0
- wandb/vendor/pygments/lexers/haxe.py +936 -0
- wandb/vendor/pygments/lexers/hdl.py +382 -0
- wandb/vendor/pygments/lexers/hexdump.py +103 -0
- wandb/vendor/pygments/lexers/html.py +602 -0
- wandb/vendor/pygments/lexers/idl.py +270 -0
- wandb/vendor/pygments/lexers/igor.py +288 -0
- wandb/vendor/pygments/lexers/inferno.py +96 -0
- wandb/vendor/pygments/lexers/installers.py +322 -0
- wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
- wandb/vendor/pygments/lexers/iolang.py +63 -0
- wandb/vendor/pygments/lexers/j.py +146 -0
- wandb/vendor/pygments/lexers/javascript.py +1525 -0
- wandb/vendor/pygments/lexers/julia.py +333 -0
- wandb/vendor/pygments/lexers/jvm.py +1573 -0
- wandb/vendor/pygments/lexers/lisp.py +2621 -0
- wandb/vendor/pygments/lexers/make.py +202 -0
- wandb/vendor/pygments/lexers/markup.py +595 -0
- wandb/vendor/pygments/lexers/math.py +21 -0
- wandb/vendor/pygments/lexers/matlab.py +663 -0
- wandb/vendor/pygments/lexers/ml.py +769 -0
- wandb/vendor/pygments/lexers/modeling.py +358 -0
- wandb/vendor/pygments/lexers/modula2.py +1561 -0
- wandb/vendor/pygments/lexers/monte.py +204 -0
- wandb/vendor/pygments/lexers/ncl.py +894 -0
- wandb/vendor/pygments/lexers/nimrod.py +159 -0
- wandb/vendor/pygments/lexers/nit.py +64 -0
- wandb/vendor/pygments/lexers/nix.py +136 -0
- wandb/vendor/pygments/lexers/oberon.py +105 -0
- wandb/vendor/pygments/lexers/objective.py +504 -0
- wandb/vendor/pygments/lexers/ooc.py +85 -0
- wandb/vendor/pygments/lexers/other.py +41 -0
- wandb/vendor/pygments/lexers/parasail.py +79 -0
- wandb/vendor/pygments/lexers/parsers.py +835 -0
- wandb/vendor/pygments/lexers/pascal.py +644 -0
- wandb/vendor/pygments/lexers/pawn.py +199 -0
- wandb/vendor/pygments/lexers/perl.py +620 -0
- wandb/vendor/pygments/lexers/php.py +267 -0
- wandb/vendor/pygments/lexers/praat.py +294 -0
- wandb/vendor/pygments/lexers/prolog.py +306 -0
- wandb/vendor/pygments/lexers/python.py +939 -0
- wandb/vendor/pygments/lexers/qvt.py +152 -0
- wandb/vendor/pygments/lexers/r.py +453 -0
- wandb/vendor/pygments/lexers/rdf.py +270 -0
- wandb/vendor/pygments/lexers/rebol.py +431 -0
- wandb/vendor/pygments/lexers/resource.py +85 -0
- wandb/vendor/pygments/lexers/rnc.py +67 -0
- wandb/vendor/pygments/lexers/roboconf.py +82 -0
- wandb/vendor/pygments/lexers/robotframework.py +560 -0
- wandb/vendor/pygments/lexers/ruby.py +519 -0
- wandb/vendor/pygments/lexers/rust.py +220 -0
- wandb/vendor/pygments/lexers/sas.py +228 -0
- wandb/vendor/pygments/lexers/scripting.py +1222 -0
- wandb/vendor/pygments/lexers/shell.py +794 -0
- wandb/vendor/pygments/lexers/smalltalk.py +195 -0
- wandb/vendor/pygments/lexers/smv.py +79 -0
- wandb/vendor/pygments/lexers/snobol.py +83 -0
- wandb/vendor/pygments/lexers/special.py +103 -0
- wandb/vendor/pygments/lexers/sql.py +681 -0
- wandb/vendor/pygments/lexers/stata.py +108 -0
- wandb/vendor/pygments/lexers/supercollider.py +90 -0
- wandb/vendor/pygments/lexers/tcl.py +145 -0
- wandb/vendor/pygments/lexers/templates.py +2283 -0
- wandb/vendor/pygments/lexers/testing.py +207 -0
- wandb/vendor/pygments/lexers/text.py +25 -0
- wandb/vendor/pygments/lexers/textedit.py +169 -0
- wandb/vendor/pygments/lexers/textfmts.py +297 -0
- wandb/vendor/pygments/lexers/theorem.py +458 -0
- wandb/vendor/pygments/lexers/trafficscript.py +54 -0
- wandb/vendor/pygments/lexers/typoscript.py +226 -0
- wandb/vendor/pygments/lexers/urbi.py +133 -0
- wandb/vendor/pygments/lexers/varnish.py +190 -0
- wandb/vendor/pygments/lexers/verification.py +111 -0
- wandb/vendor/pygments/lexers/web.py +24 -0
- wandb/vendor/pygments/lexers/webmisc.py +988 -0
- wandb/vendor/pygments/lexers/whiley.py +116 -0
- wandb/vendor/pygments/lexers/x10.py +69 -0
- wandb/vendor/pygments/modeline.py +44 -0
- wandb/vendor/pygments/plugin.py +68 -0
- wandb/vendor/pygments/regexopt.py +92 -0
- wandb/vendor/pygments/scanner.py +105 -0
- wandb/vendor/pygments/sphinxext.py +158 -0
- wandb/vendor/pygments/style.py +155 -0
- wandb/vendor/pygments/styles/__init__.py +80 -0
- wandb/vendor/pygments/styles/abap.py +29 -0
- wandb/vendor/pygments/styles/algol.py +63 -0
- wandb/vendor/pygments/styles/algol_nu.py +63 -0
- wandb/vendor/pygments/styles/arduino.py +98 -0
- wandb/vendor/pygments/styles/autumn.py +65 -0
- wandb/vendor/pygments/styles/borland.py +51 -0
- wandb/vendor/pygments/styles/bw.py +49 -0
- wandb/vendor/pygments/styles/colorful.py +81 -0
- wandb/vendor/pygments/styles/default.py +73 -0
- wandb/vendor/pygments/styles/emacs.py +72 -0
- wandb/vendor/pygments/styles/friendly.py +72 -0
- wandb/vendor/pygments/styles/fruity.py +42 -0
- wandb/vendor/pygments/styles/igor.py +29 -0
- wandb/vendor/pygments/styles/lovelace.py +97 -0
- wandb/vendor/pygments/styles/manni.py +75 -0
- wandb/vendor/pygments/styles/monokai.py +106 -0
- wandb/vendor/pygments/styles/murphy.py +80 -0
- wandb/vendor/pygments/styles/native.py +65 -0
- wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
- wandb/vendor/pygments/styles/paraiso_light.py +125 -0
- wandb/vendor/pygments/styles/pastie.py +75 -0
- wandb/vendor/pygments/styles/perldoc.py +69 -0
- wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
- wandb/vendor/pygments/styles/rrt.py +33 -0
- wandb/vendor/pygments/styles/sas.py +44 -0
- wandb/vendor/pygments/styles/stata.py +40 -0
- wandb/vendor/pygments/styles/tango.py +141 -0
- wandb/vendor/pygments/styles/trac.py +63 -0
- wandb/vendor/pygments/styles/vim.py +63 -0
- wandb/vendor/pygments/styles/vs.py +38 -0
- wandb/vendor/pygments/styles/xcode.py +51 -0
- wandb/vendor/pygments/token.py +213 -0
- wandb/vendor/pygments/unistring.py +217 -0
- wandb/vendor/pygments/util.py +388 -0
- wandb/vendor/pynvml/__init__.py +0 -0
- wandb/vendor/pynvml/pynvml.py +4779 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
- wandb/wandb_agent.py +588 -0
- wandb/wandb_controller.py +721 -0
- wandb/wandb_run.py +9 -0
- wandb-0.18.2.dist-info/METADATA +213 -0
- wandb-0.18.2.dist-info/RECORD +827 -0
- wandb-0.18.2.dist-info/WHEEL +5 -0
- wandb-0.18.2.dist-info/entry_points.txt +3 -0
- wandb-0.18.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,914 @@
|
|
1
|
+
import datetime
|
2
|
+
import math
|
3
|
+
import typing as t
|
4
|
+
|
5
|
+
from wandb.util import (
|
6
|
+
_is_artifact_string,
|
7
|
+
_is_artifact_version_weave_dict,
|
8
|
+
get_module,
|
9
|
+
is_numpy_array,
|
10
|
+
)
|
11
|
+
|
12
|
+
np = get_module("numpy") # intentionally not required
|
13
|
+
|
14
|
+
if t.TYPE_CHECKING:
|
15
|
+
from wandb.sdk.artifacts.artifact import Artifact
|
16
|
+
|
17
|
+
ConvertibleToType = t.Union["Type", t.Type["Type"], type, t.Any]
|
18
|
+
|
19
|
+
|
20
|
+
class TypeRegistry:
|
21
|
+
"""A resolver for python objects that can deserialize JSON dicts.
|
22
|
+
|
23
|
+
Additional types can be registered via the .add call.
|
24
|
+
"""
|
25
|
+
|
26
|
+
_types_by_name = None
|
27
|
+
_types_by_class = None
|
28
|
+
|
29
|
+
@staticmethod
|
30
|
+
def types_by_name():
|
31
|
+
if TypeRegistry._types_by_name is None:
|
32
|
+
TypeRegistry._types_by_name = {}
|
33
|
+
return TypeRegistry._types_by_name
|
34
|
+
|
35
|
+
@staticmethod
|
36
|
+
def types_by_class():
|
37
|
+
if TypeRegistry._types_by_class is None:
|
38
|
+
TypeRegistry._types_by_class = {}
|
39
|
+
return TypeRegistry._types_by_class
|
40
|
+
|
41
|
+
@staticmethod
|
42
|
+
def add(wb_type: t.Type["Type"]) -> None:
|
43
|
+
assert issubclass(wb_type, Type)
|
44
|
+
TypeRegistry.types_by_name().update({wb_type.name: wb_type})
|
45
|
+
for name in wb_type.legacy_names:
|
46
|
+
TypeRegistry.types_by_name().update({name: wb_type})
|
47
|
+
TypeRegistry.types_by_class().update(
|
48
|
+
{_type: wb_type for _type in wb_type.types}
|
49
|
+
)
|
50
|
+
|
51
|
+
@staticmethod
|
52
|
+
def type_of(py_obj: t.Optional[t.Any]) -> "Type":
|
53
|
+
# Special case handler for common case of np.nans. np.nan
|
54
|
+
# is of type 'float', but should be treated as a None. This is
|
55
|
+
# because np.nan can co-exist with other types in dataframes,
|
56
|
+
# but will be ultimately treated as a None. Ignoring type since
|
57
|
+
# mypy does not trust that py_obj is a float by the time it is
|
58
|
+
# passed to isnan.
|
59
|
+
if py_obj.__class__ is float and math.isnan(py_obj): # type: ignore
|
60
|
+
return NoneType()
|
61
|
+
|
62
|
+
# TODO: generalize this to handle other config input types
|
63
|
+
if _is_artifact_string(py_obj) or _is_artifact_version_weave_dict(py_obj):
|
64
|
+
return TypeRegistry.types_by_name().get("artifactVersion")()
|
65
|
+
|
66
|
+
class_handler = TypeRegistry.types_by_class().get(py_obj.__class__)
|
67
|
+
_type = None
|
68
|
+
if class_handler:
|
69
|
+
_type = class_handler.from_obj(py_obj)
|
70
|
+
else:
|
71
|
+
_type = PythonObjectType.from_obj(py_obj)
|
72
|
+
return _type
|
73
|
+
|
74
|
+
@staticmethod
|
75
|
+
def type_from_dict(
|
76
|
+
json_dict: t.Dict[str, t.Any], artifact: t.Optional["Artifact"] = None
|
77
|
+
) -> "Type":
|
78
|
+
wb_type = json_dict.get("wb_type")
|
79
|
+
if wb_type is None:
|
80
|
+
TypeError("json_dict must contain `wb_type` key")
|
81
|
+
_type = TypeRegistry.types_by_name().get(wb_type)
|
82
|
+
if _type is None:
|
83
|
+
TypeError(f"missing type handler for {wb_type}")
|
84
|
+
return _type.from_json(json_dict, artifact)
|
85
|
+
|
86
|
+
@staticmethod
|
87
|
+
def type_from_dtype(dtype: ConvertibleToType) -> "Type":
|
88
|
+
# The dtype is already an instance of Type
|
89
|
+
if isinstance(dtype, Type):
|
90
|
+
wbtype: Type = dtype
|
91
|
+
|
92
|
+
# The dtype is a subclass of Type
|
93
|
+
elif isinstance(dtype, type) and issubclass(dtype, Type):
|
94
|
+
wbtype = dtype()
|
95
|
+
|
96
|
+
# The dtype is a subclass of generic python type
|
97
|
+
elif isinstance(dtype, type):
|
98
|
+
handler = TypeRegistry.types_by_class().get(dtype)
|
99
|
+
|
100
|
+
# and we have a registered handler
|
101
|
+
if handler:
|
102
|
+
wbtype = handler()
|
103
|
+
|
104
|
+
# else, fallback to object type
|
105
|
+
else:
|
106
|
+
wbtype = PythonObjectType.from_obj(dtype)
|
107
|
+
|
108
|
+
# The dtype is a list, then we resolve the list notation
|
109
|
+
elif isinstance(dtype, list):
|
110
|
+
if len(dtype) == 0:
|
111
|
+
wbtype = ListType()
|
112
|
+
elif len(dtype) == 1:
|
113
|
+
wbtype = ListType(TypeRegistry.type_from_dtype(dtype[0]))
|
114
|
+
|
115
|
+
# lists of more than 1 are treated as unions
|
116
|
+
else:
|
117
|
+
wbtype = UnionType([TypeRegistry.type_from_dtype(dt) for dt in dtype])
|
118
|
+
|
119
|
+
# The dtype is a dict, then we resolve the dict notation
|
120
|
+
elif isinstance(dtype, dict):
|
121
|
+
wbtype = TypedDictType(
|
122
|
+
{key: TypeRegistry.type_from_dtype(dtype[key]) for key in dtype}
|
123
|
+
)
|
124
|
+
|
125
|
+
# The dtype is a concrete instance, which we will treat as a constant
|
126
|
+
else:
|
127
|
+
wbtype = ConstType(dtype)
|
128
|
+
|
129
|
+
return wbtype
|
130
|
+
|
131
|
+
|
132
|
+
def _params_obj_to_json_obj(
|
133
|
+
params_obj: t.Any,
|
134
|
+
artifact: t.Optional["Artifact"] = None,
|
135
|
+
) -> t.Any:
|
136
|
+
"""Helper method."""
|
137
|
+
if params_obj.__class__ is dict:
|
138
|
+
return {
|
139
|
+
key: _params_obj_to_json_obj(params_obj[key], artifact)
|
140
|
+
for key in params_obj
|
141
|
+
}
|
142
|
+
elif params_obj.__class__ in [list, set, tuple, frozenset]:
|
143
|
+
return [_params_obj_to_json_obj(item, artifact) for item in list(params_obj)]
|
144
|
+
elif isinstance(params_obj, Type):
|
145
|
+
return params_obj.to_json(artifact)
|
146
|
+
else:
|
147
|
+
return params_obj
|
148
|
+
|
149
|
+
|
150
|
+
def _json_obj_to_params_obj(
|
151
|
+
json_obj: t.Any, artifact: t.Optional["Artifact"] = None
|
152
|
+
) -> t.Any:
|
153
|
+
"""Helper method."""
|
154
|
+
if json_obj.__class__ is dict:
|
155
|
+
if "wb_type" in json_obj:
|
156
|
+
return TypeRegistry.type_from_dict(json_obj, artifact)
|
157
|
+
else:
|
158
|
+
return {
|
159
|
+
key: _json_obj_to_params_obj(json_obj[key], artifact)
|
160
|
+
for key in json_obj
|
161
|
+
}
|
162
|
+
elif json_obj.__class__ is list:
|
163
|
+
return [_json_obj_to_params_obj(item, artifact) for item in json_obj]
|
164
|
+
else:
|
165
|
+
return json_obj
|
166
|
+
|
167
|
+
|
168
|
+
class Type:
|
169
|
+
"""The most generic type that all types subclass.
|
170
|
+
|
171
|
+
It provides simple serialization and deserialization as well as equality checks.
|
172
|
+
A name class-level property must be uniquely set by subclasses.
|
173
|
+
"""
|
174
|
+
|
175
|
+
# Subclasses must override with a unique name. This is used to identify the
|
176
|
+
# class during serializations and deserializations
|
177
|
+
name: t.ClassVar[str] = ""
|
178
|
+
|
179
|
+
# List of names by which this class can deserialize
|
180
|
+
legacy_names: t.ClassVar[t.List[str]] = []
|
181
|
+
|
182
|
+
# Subclasses may override with a list of `types` which this Type is capable
|
183
|
+
# of being initialized. This is used by the Type Registry when calling `TypeRegistry.type_of`.
|
184
|
+
# Some types will have an empty list - for example `Union`. There is no raw python type which
|
185
|
+
# inherently maps to a Union and therefore the list should be empty.
|
186
|
+
types: t.ClassVar[t.List[type]] = []
|
187
|
+
|
188
|
+
# Contains the further specification of the Type
|
189
|
+
_params: t.Dict[str, t.Any]
|
190
|
+
|
191
|
+
def __init__(*args, **kwargs):
|
192
|
+
pass
|
193
|
+
|
194
|
+
@property
|
195
|
+
def params(self):
|
196
|
+
if not hasattr(self, "_params") or self._params is None:
|
197
|
+
self._params = {}
|
198
|
+
return self._params
|
199
|
+
|
200
|
+
def assign(self, py_obj: t.Optional[t.Any] = None) -> "Type":
|
201
|
+
"""Assign a python object to the type.
|
202
|
+
|
203
|
+
May to be overridden by subclasses
|
204
|
+
|
205
|
+
Args:
|
206
|
+
py_obj (any, optional): Any python object which the user wishes to assign to
|
207
|
+
this type
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
Type: a new type representing the result of the assignment.
|
211
|
+
"""
|
212
|
+
return self.assign_type(TypeRegistry.type_of(py_obj))
|
213
|
+
|
214
|
+
def assign_type(self, wb_type: "Type") -> "Type":
|
215
|
+
# Default - should be overridden
|
216
|
+
if isinstance(wb_type, self.__class__) and self.params == wb_type.params:
|
217
|
+
return self
|
218
|
+
else:
|
219
|
+
return InvalidType()
|
220
|
+
|
221
|
+
def to_json(self, artifact: t.Optional["Artifact"] = None) -> t.Dict[str, t.Any]:
|
222
|
+
"""Generate a jsonable dictionary serialization the type.
|
223
|
+
|
224
|
+
If overridden by subclass, ensure that `from_json` is equivalently overridden.
|
225
|
+
|
226
|
+
Args:
|
227
|
+
artifact (wandb.Artifact, optional): If the serialization is being performed
|
228
|
+
for a particular artifact, pass that artifact. Defaults to None.
|
229
|
+
|
230
|
+
Returns:
|
231
|
+
dict: Representation of the type
|
232
|
+
"""
|
233
|
+
res = {
|
234
|
+
"wb_type": self.name,
|
235
|
+
"params": _params_obj_to_json_obj(self.params, artifact),
|
236
|
+
}
|
237
|
+
if res["params"] is None or res["params"] == {}:
|
238
|
+
del res["params"]
|
239
|
+
|
240
|
+
return res
|
241
|
+
|
242
|
+
@classmethod
|
243
|
+
def from_json(
|
244
|
+
cls,
|
245
|
+
json_dict: t.Dict[str, t.Any],
|
246
|
+
artifact: t.Optional["Artifact"] = None,
|
247
|
+
) -> "Type":
|
248
|
+
"""Construct a new instance of the type using a JSON dictionary.
|
249
|
+
|
250
|
+
The mirror function of `to_json`. If overridden by subclass, ensure that
|
251
|
+
`to_json` is equivalently overridden.
|
252
|
+
|
253
|
+
Returns:
|
254
|
+
_Type: an instance of a subclass of the _Type class.
|
255
|
+
"""
|
256
|
+
return cls(**_json_obj_to_params_obj(json_dict.get("params", {}), artifact))
|
257
|
+
|
258
|
+
@classmethod
|
259
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "Type":
|
260
|
+
return cls()
|
261
|
+
|
262
|
+
def explain(self, other: t.Any, depth=0) -> str:
|
263
|
+
"""Explain why an item is not assignable to a type.
|
264
|
+
|
265
|
+
Assumes that the caller has already validated that the assignment fails.
|
266
|
+
|
267
|
+
Args:
|
268
|
+
other (any): Any object depth (int, optional): depth of the type checking.
|
269
|
+
Defaults to 0.
|
270
|
+
|
271
|
+
Returns:
|
272
|
+
str: human-readable explanation
|
273
|
+
"""
|
274
|
+
wbtype = TypeRegistry.type_of(other)
|
275
|
+
gap = "".join(["\t"] * depth)
|
276
|
+
if depth > 0:
|
277
|
+
return f"{gap}{wbtype} not assignable to {self}"
|
278
|
+
else:
|
279
|
+
return f"{gap}{other} of type {wbtype} is not assignable to {self}"
|
280
|
+
|
281
|
+
def __repr__(self):
|
282
|
+
rep = self.name.capitalize()
|
283
|
+
if len(self.params.keys()) > 0:
|
284
|
+
rep += "("
|
285
|
+
for ndx, key in enumerate(self.params.keys()):
|
286
|
+
if ndx > 0:
|
287
|
+
rep += ", "
|
288
|
+
rep += key + ":" + str(self.params[key])
|
289
|
+
rep += ")"
|
290
|
+
return rep
|
291
|
+
|
292
|
+
def __eq__(self, other):
|
293
|
+
return self is other or (
|
294
|
+
isinstance(self, Type)
|
295
|
+
and isinstance(other, Type)
|
296
|
+
and self.name == other.name
|
297
|
+
and self.params.keys() == other.params.keys()
|
298
|
+
and all([self.params[k] == other.params[k] for k in self.params])
|
299
|
+
)
|
300
|
+
|
301
|
+
|
302
|
+
class InvalidType(Type):
|
303
|
+
"""A disallowed type.
|
304
|
+
|
305
|
+
Assignments to a InvalidType result in a Never Type. InvalidType is basically the
|
306
|
+
invalid case.
|
307
|
+
"""
|
308
|
+
|
309
|
+
name = "invalid"
|
310
|
+
types: t.ClassVar[t.List[type]] = []
|
311
|
+
|
312
|
+
def assign_type(self, wb_type: "Type") -> "InvalidType":
|
313
|
+
return self
|
314
|
+
|
315
|
+
|
316
|
+
class AnyType(Type):
|
317
|
+
"""An object that can be any type.
|
318
|
+
|
319
|
+
Assignments to an AnyType result in the AnyType except None which results in an
|
320
|
+
InvalidType.
|
321
|
+
"""
|
322
|
+
|
323
|
+
name = "any"
|
324
|
+
types: t.ClassVar[t.List[type]] = []
|
325
|
+
|
326
|
+
def assign_type(self, wb_type: "Type") -> t.Union["AnyType", InvalidType]:
|
327
|
+
return (
|
328
|
+
self
|
329
|
+
if not (isinstance(wb_type, NoneType) or isinstance(wb_type, InvalidType))
|
330
|
+
else InvalidType()
|
331
|
+
)
|
332
|
+
|
333
|
+
|
334
|
+
class UnknownType(Type):
|
335
|
+
"""An object with an unknown type.
|
336
|
+
|
337
|
+
All assignments to an UnknownType result in the type of the assigned object except
|
338
|
+
`None` which results in a InvalidType.
|
339
|
+
"""
|
340
|
+
|
341
|
+
name = "unknown"
|
342
|
+
types: t.ClassVar[t.List[type]] = []
|
343
|
+
|
344
|
+
def assign_type(self, wb_type: "Type") -> "Type":
|
345
|
+
return wb_type if not isinstance(wb_type, NoneType) else InvalidType()
|
346
|
+
|
347
|
+
|
348
|
+
class NoneType(Type):
|
349
|
+
name = "none"
|
350
|
+
types: t.ClassVar[t.List[type]] = [None.__class__]
|
351
|
+
|
352
|
+
|
353
|
+
class StringType(Type):
|
354
|
+
name = "string"
|
355
|
+
types: t.ClassVar[t.List[type]] = [str]
|
356
|
+
|
357
|
+
|
358
|
+
class NumberType(Type):
|
359
|
+
name = "number"
|
360
|
+
types: t.ClassVar[t.List[type]] = [int, float]
|
361
|
+
|
362
|
+
|
363
|
+
if np:
|
364
|
+
NumberType.types.append(np.byte)
|
365
|
+
NumberType.types.append(np.short)
|
366
|
+
NumberType.types.append(np.ushort)
|
367
|
+
NumberType.types.append(np.intc)
|
368
|
+
NumberType.types.append(np.uintc)
|
369
|
+
NumberType.types.append(np.int_)
|
370
|
+
NumberType.types.append(np.uint)
|
371
|
+
NumberType.types.append(np.longlong)
|
372
|
+
NumberType.types.append(np.ulonglong)
|
373
|
+
NumberType.types.append(np.half)
|
374
|
+
NumberType.types.append(np.float16)
|
375
|
+
NumberType.types.append(np.single)
|
376
|
+
NumberType.types.append(np.double)
|
377
|
+
NumberType.types.append(np.longdouble)
|
378
|
+
NumberType.types.append(np.csingle)
|
379
|
+
NumberType.types.append(np.cdouble)
|
380
|
+
NumberType.types.append(np.clongdouble)
|
381
|
+
NumberType.types.append(np.int8)
|
382
|
+
NumberType.types.append(np.int16)
|
383
|
+
NumberType.types.append(np.int32)
|
384
|
+
NumberType.types.append(np.int64)
|
385
|
+
NumberType.types.append(np.uint8)
|
386
|
+
NumberType.types.append(np.uint16)
|
387
|
+
NumberType.types.append(np.uint32)
|
388
|
+
NumberType.types.append(np.uint64)
|
389
|
+
NumberType.types.append(np.intp)
|
390
|
+
NumberType.types.append(np.uintp)
|
391
|
+
NumberType.types.append(np.float32)
|
392
|
+
NumberType.types.append(np.float64)
|
393
|
+
NumberType.types.append(np.complex64)
|
394
|
+
NumberType.types.append(np.complex128)
|
395
|
+
|
396
|
+
numpy_major_version = np.__version__.split(".")[0]
|
397
|
+
if int(numpy_major_version) < 2:
|
398
|
+
NumberType.types.append(np.float_)
|
399
|
+
NumberType.types.append(np.complex_)
|
400
|
+
|
401
|
+
|
402
|
+
class TimestampType(Type):
|
403
|
+
name = "timestamp"
|
404
|
+
types: t.ClassVar[t.List[type]] = [datetime.datetime, datetime.date]
|
405
|
+
|
406
|
+
|
407
|
+
if np:
|
408
|
+
TimestampType.types.append(np.datetime64)
|
409
|
+
|
410
|
+
|
411
|
+
class BooleanType(Type):
|
412
|
+
name = "boolean"
|
413
|
+
types: t.ClassVar[t.List[type]] = [bool]
|
414
|
+
|
415
|
+
|
416
|
+
if np:
|
417
|
+
BooleanType.types.append(np.bool_)
|
418
|
+
|
419
|
+
|
420
|
+
class PythonObjectType(Type):
|
421
|
+
"""A backup type that keeps track of the python object name."""
|
422
|
+
|
423
|
+
name = "pythonObject"
|
424
|
+
legacy_names = ["object"]
|
425
|
+
types: t.ClassVar[t.List[type]] = []
|
426
|
+
|
427
|
+
def __init__(self, class_name: str):
|
428
|
+
self.params.update({"class_name": class_name})
|
429
|
+
|
430
|
+
@classmethod
|
431
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "PythonObjectType":
|
432
|
+
return cls(py_obj.__class__.__name__)
|
433
|
+
|
434
|
+
|
435
|
+
class ConstType(Type):
|
436
|
+
"""A constant value (currently only primitives supported)."""
|
437
|
+
|
438
|
+
name = "const"
|
439
|
+
types: t.ClassVar[t.List[type]] = []
|
440
|
+
|
441
|
+
def __init__(self, val: t.Optional[t.Any] = None, is_set: t.Optional[bool] = False):
|
442
|
+
if val.__class__ not in [str, int, float, bool, set, list, None.__class__]:
|
443
|
+
TypeError(
|
444
|
+
f"ConstType only supports str, int, float, bool, set, list, and None types. Found {val}"
|
445
|
+
)
|
446
|
+
if is_set or isinstance(val, set):
|
447
|
+
is_set = True
|
448
|
+
assert isinstance(val, set) or isinstance(val, list)
|
449
|
+
val = set(val)
|
450
|
+
|
451
|
+
self.params.update({"val": val, "is_set": is_set})
|
452
|
+
|
453
|
+
def assign(self, py_obj: t.Optional[t.Any] = None) -> "Type":
|
454
|
+
return self.assign_type(ConstType(py_obj))
|
455
|
+
|
456
|
+
@classmethod
|
457
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "ConstType":
|
458
|
+
return cls(py_obj)
|
459
|
+
|
460
|
+
def __repr__(self):
|
461
|
+
return str(self.params["val"])
|
462
|
+
|
463
|
+
|
464
|
+
def _flatten_union_types(wb_types: t.List[Type]) -> t.List[Type]:
|
465
|
+
final_types = []
|
466
|
+
for allowed_type in wb_types:
|
467
|
+
if isinstance(allowed_type, UnionType):
|
468
|
+
internal_types = _flatten_union_types(allowed_type.params["allowed_types"])
|
469
|
+
for internal_type in internal_types:
|
470
|
+
final_types.append(internal_type)
|
471
|
+
else:
|
472
|
+
final_types.append(allowed_type)
|
473
|
+
return final_types
|
474
|
+
|
475
|
+
|
476
|
+
def _union_assigner(
|
477
|
+
allowed_types: t.List[Type],
|
478
|
+
obj_or_type: t.Union[Type, t.Optional[t.Any]],
|
479
|
+
type_mode=False,
|
480
|
+
) -> t.Union[t.List[Type], InvalidType]:
|
481
|
+
resolved_types = []
|
482
|
+
valid = False
|
483
|
+
unknown_count = 0
|
484
|
+
|
485
|
+
for allowed_type in allowed_types:
|
486
|
+
if valid:
|
487
|
+
resolved_types.append(allowed_type)
|
488
|
+
else:
|
489
|
+
if isinstance(allowed_type, UnknownType):
|
490
|
+
unknown_count += 1
|
491
|
+
else:
|
492
|
+
if type_mode:
|
493
|
+
assert isinstance(obj_or_type, Type)
|
494
|
+
assigned_type = allowed_type.assign_type(obj_or_type)
|
495
|
+
else:
|
496
|
+
assigned_type = allowed_type.assign(obj_or_type)
|
497
|
+
if isinstance(assigned_type, InvalidType):
|
498
|
+
resolved_types.append(allowed_type)
|
499
|
+
else:
|
500
|
+
resolved_types.append(assigned_type)
|
501
|
+
valid = True
|
502
|
+
|
503
|
+
if not valid:
|
504
|
+
if unknown_count == 0:
|
505
|
+
return InvalidType()
|
506
|
+
else:
|
507
|
+
if type_mode:
|
508
|
+
assert isinstance(obj_or_type, Type)
|
509
|
+
new_type = obj_or_type
|
510
|
+
else:
|
511
|
+
new_type = UnknownType().assign(obj_or_type)
|
512
|
+
if isinstance(new_type, InvalidType):
|
513
|
+
return InvalidType()
|
514
|
+
else:
|
515
|
+
resolved_types.append(new_type)
|
516
|
+
unknown_count -= 1
|
517
|
+
|
518
|
+
for _ in range(unknown_count):
|
519
|
+
resolved_types.append(UnknownType())
|
520
|
+
|
521
|
+
resolved_types = _flatten_union_types(resolved_types)
|
522
|
+
resolved_types.sort(key=str)
|
523
|
+
return resolved_types
|
524
|
+
|
525
|
+
|
526
|
+
class UnionType(Type):
|
527
|
+
"""An "or" of types."""
|
528
|
+
|
529
|
+
name = "union"
|
530
|
+
types: t.ClassVar[t.List[type]] = []
|
531
|
+
|
532
|
+
def __init__(
|
533
|
+
self,
|
534
|
+
allowed_types: t.Optional[t.Sequence[ConvertibleToType]] = None,
|
535
|
+
):
|
536
|
+
assert allowed_types is None or (allowed_types.__class__ is list)
|
537
|
+
if allowed_types is None:
|
538
|
+
wb_types = []
|
539
|
+
else:
|
540
|
+
wb_types = [TypeRegistry.type_from_dtype(dt) for dt in allowed_types]
|
541
|
+
|
542
|
+
wb_types = _flatten_union_types(wb_types)
|
543
|
+
wb_types.sort(key=str)
|
544
|
+
self.params.update({"allowed_types": wb_types})
|
545
|
+
|
546
|
+
def assign(
|
547
|
+
self, py_obj: t.Optional[t.Any] = None
|
548
|
+
) -> t.Union["UnionType", InvalidType]:
|
549
|
+
resolved_types = _union_assigner(
|
550
|
+
self.params["allowed_types"], py_obj, type_mode=False
|
551
|
+
)
|
552
|
+
if isinstance(resolved_types, InvalidType):
|
553
|
+
return InvalidType()
|
554
|
+
return self.__class__(resolved_types)
|
555
|
+
|
556
|
+
def assign_type(self, wb_type: "Type") -> t.Union["UnionType", InvalidType]:
|
557
|
+
if isinstance(wb_type, UnionType):
|
558
|
+
assignees = wb_type.params["allowed_types"]
|
559
|
+
else:
|
560
|
+
assignees = [wb_type]
|
561
|
+
|
562
|
+
resolved_types = self.params["allowed_types"]
|
563
|
+
for assignee in assignees:
|
564
|
+
resolved_types = _union_assigner(resolved_types, assignee, type_mode=True)
|
565
|
+
if isinstance(resolved_types, InvalidType):
|
566
|
+
return InvalidType()
|
567
|
+
|
568
|
+
return self.__class__(resolved_types)
|
569
|
+
|
570
|
+
def explain(self, other: t.Any, depth=0) -> str:
|
571
|
+
exp = super().explain(other, depth)
|
572
|
+
for ndx, subtype in enumerate(self.params["allowed_types"]):
|
573
|
+
if ndx > 0:
|
574
|
+
exp += "\n{}and".format("".join(["\t"] * depth))
|
575
|
+
exp += "\n" + subtype.explain(other, depth=depth + 1)
|
576
|
+
return exp
|
577
|
+
|
578
|
+
def __repr__(self):
|
579
|
+
return "{}".format(" or ".join([str(t) for t in self.params["allowed_types"]]))
|
580
|
+
|
581
|
+
|
582
|
+
def OptionalType(dtype: ConvertibleToType) -> UnionType: # noqa: N802
|
583
|
+
"""Function that mimics the Type class API for constructing an "Optional Type".
|
584
|
+
|
585
|
+
This is just a Union[wb_type, NoneType].
|
586
|
+
|
587
|
+
Args:
|
588
|
+
dtype (Type): type to be optional
|
589
|
+
|
590
|
+
Returns:
|
591
|
+
Type: Optional version of the type.
|
592
|
+
"""
|
593
|
+
return UnionType([TypeRegistry.type_from_dtype(dtype), NoneType()])
|
594
|
+
|
595
|
+
|
596
|
+
class ListType(Type):
|
597
|
+
"""A list of homogeneous types."""
|
598
|
+
|
599
|
+
name = "list"
|
600
|
+
types: t.ClassVar[t.List[type]] = [list, tuple, set, frozenset]
|
601
|
+
|
602
|
+
def __init__(
|
603
|
+
self,
|
604
|
+
element_type: t.Optional[ConvertibleToType] = None,
|
605
|
+
length: t.Optional[int] = None,
|
606
|
+
):
|
607
|
+
if element_type is None:
|
608
|
+
wb_type: Type = UnknownType()
|
609
|
+
else:
|
610
|
+
wb_type = TypeRegistry.type_from_dtype(element_type)
|
611
|
+
|
612
|
+
self.params.update({"element_type": wb_type, "length": length})
|
613
|
+
|
614
|
+
@classmethod
|
615
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "ListType":
|
616
|
+
if py_obj is None or not hasattr(py_obj, "__iter__"):
|
617
|
+
raise TypeError("ListType.from_obj expects py_obj to by list-like")
|
618
|
+
else:
|
619
|
+
if hasattr(py_obj, "tolist"):
|
620
|
+
py_list = py_obj.tolist()
|
621
|
+
else:
|
622
|
+
py_list = list(py_obj)
|
623
|
+
elm_type = (
|
624
|
+
UnknownType() if None not in py_list else OptionalType(UnknownType())
|
625
|
+
)
|
626
|
+
for item in py_list:
|
627
|
+
_elm_type = elm_type.assign(item)
|
628
|
+
# Commenting this out since we don't want to crash user code at this point, but rather
|
629
|
+
# retain an invalid internal list type.
|
630
|
+
# if isinstance(_elm_type, InvalidType):
|
631
|
+
# raise TypeError(
|
632
|
+
# "List contained incompatible types. Item at index {}: \n{}".format(
|
633
|
+
# ndx, elm_type.explain(item, 1)
|
634
|
+
# )
|
635
|
+
# )
|
636
|
+
|
637
|
+
elm_type = _elm_type
|
638
|
+
|
639
|
+
return cls(elm_type, len(py_list))
|
640
|
+
|
641
|
+
def assign_type(self, wb_type: "Type") -> t.Union["ListType", InvalidType]:
|
642
|
+
if isinstance(wb_type, ListType):
|
643
|
+
assigned_type = self.params["element_type"].assign_type(
|
644
|
+
wb_type.params["element_type"]
|
645
|
+
)
|
646
|
+
if not isinstance(assigned_type, InvalidType):
|
647
|
+
return ListType(
|
648
|
+
assigned_type,
|
649
|
+
None
|
650
|
+
if self.params["length"] != wb_type.params["length"]
|
651
|
+
else self.params["length"],
|
652
|
+
)
|
653
|
+
|
654
|
+
return InvalidType()
|
655
|
+
|
656
|
+
def assign(
|
657
|
+
self, py_obj: t.Optional[t.Any] = None
|
658
|
+
) -> t.Union["ListType", InvalidType]:
|
659
|
+
if hasattr(py_obj, "__iter__"):
|
660
|
+
new_element_type = self.params["element_type"]
|
661
|
+
# The following ignore is needed since the above hasattr(py_obj, "__iter__") enforces iteration
|
662
|
+
# error: Argument 1 to "list" has incompatible type "Optional[Any]"; expected "Iterable[Any]"
|
663
|
+
py_list = list(py_obj) # type: ignore
|
664
|
+
for obj in py_list:
|
665
|
+
new_element_type = new_element_type.assign(obj)
|
666
|
+
if isinstance(new_element_type, InvalidType):
|
667
|
+
return InvalidType()
|
668
|
+
return ListType(new_element_type, len(py_list))
|
669
|
+
|
670
|
+
return InvalidType()
|
671
|
+
|
672
|
+
def explain(self, other: t.Any, depth=0) -> str:
|
673
|
+
exp = super().explain(other, depth)
|
674
|
+
gap = "".join(["\t"] * depth)
|
675
|
+
if ( # yes, this is a bit verbose, but the mypy typechecker likes it this way
|
676
|
+
isinstance(other, list)
|
677
|
+
or isinstance(other, tuple)
|
678
|
+
or isinstance(other, set)
|
679
|
+
or isinstance(other, frozenset)
|
680
|
+
):
|
681
|
+
new_element_type = self.params["element_type"]
|
682
|
+
for ndx, obj in enumerate(list(other)):
|
683
|
+
_new_element_type = new_element_type.assign(obj)
|
684
|
+
if isinstance(_new_element_type, InvalidType):
|
685
|
+
exp += "\n{}Index {}:\n{}".format(
|
686
|
+
gap, ndx, new_element_type.explain(obj, depth + 1)
|
687
|
+
)
|
688
|
+
break
|
689
|
+
new_element_type = _new_element_type
|
690
|
+
return exp
|
691
|
+
|
692
|
+
def __repr__(self):
|
693
|
+
return "{}[]".format(self.params["element_type"])
|
694
|
+
|
695
|
+
|
696
|
+
class NDArrayType(Type):
|
697
|
+
"""Represents a list of homogeneous types."""
|
698
|
+
|
699
|
+
name = "ndarray"
|
700
|
+
types: t.ClassVar[t.List[type]] = [] # will manually add type if np is available
|
701
|
+
_serialization_path: t.Optional[t.Dict[str, str]]
|
702
|
+
|
703
|
+
def __init__(
|
704
|
+
self,
|
705
|
+
shape: t.Sequence[int],
|
706
|
+
serialization_path: t.Optional[t.Dict[str, str]] = None,
|
707
|
+
):
|
708
|
+
self.params.update({"shape": list(shape)})
|
709
|
+
self._serialization_path = serialization_path
|
710
|
+
|
711
|
+
@classmethod
|
712
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "NDArrayType":
|
713
|
+
if is_numpy_array(py_obj):
|
714
|
+
return cls(py_obj.shape) # type: ignore
|
715
|
+
elif isinstance(py_obj, list):
|
716
|
+
shape = []
|
717
|
+
target = py_obj
|
718
|
+
while isinstance(target, list):
|
719
|
+
dim = len(target)
|
720
|
+
shape.append(dim)
|
721
|
+
if dim > 0:
|
722
|
+
target = target[0]
|
723
|
+
return cls(shape)
|
724
|
+
else:
|
725
|
+
raise TypeError(
|
726
|
+
"NDArrayType.from_obj expects py_obj to be ndarray or list, found {}".format(
|
727
|
+
py_obj.__class__
|
728
|
+
)
|
729
|
+
)
|
730
|
+
|
731
|
+
def assign_type(self, wb_type: "Type") -> t.Union["NDArrayType", InvalidType]:
|
732
|
+
if (
|
733
|
+
isinstance(wb_type, NDArrayType)
|
734
|
+
and self.params["shape"] == wb_type.params["shape"]
|
735
|
+
):
|
736
|
+
return self
|
737
|
+
elif isinstance(wb_type, ListType):
|
738
|
+
# Should we return error here?
|
739
|
+
return self
|
740
|
+
|
741
|
+
return InvalidType()
|
742
|
+
|
743
|
+
def assign(
|
744
|
+
self, py_obj: t.Optional[t.Any] = None
|
745
|
+
) -> t.Union["NDArrayType", InvalidType]:
|
746
|
+
if is_numpy_array(py_obj) or isinstance(py_obj, list):
|
747
|
+
py_type = self.from_obj(py_obj)
|
748
|
+
return self.assign_type(py_type)
|
749
|
+
|
750
|
+
return InvalidType()
|
751
|
+
|
752
|
+
def to_json(self, artifact: t.Optional["Artifact"] = None) -> t.Dict[str, t.Any]:
|
753
|
+
# custom override to support serialization path outside of params internal dict
|
754
|
+
res = {
|
755
|
+
"wb_type": self.name,
|
756
|
+
"params": {
|
757
|
+
"shape": self.params["shape"],
|
758
|
+
"serialization_path": self._serialization_path,
|
759
|
+
},
|
760
|
+
}
|
761
|
+
|
762
|
+
return res
|
763
|
+
|
764
|
+
def _get_serialization_path(self) -> t.Optional[t.Dict[str, str]]:
|
765
|
+
return self._serialization_path
|
766
|
+
|
767
|
+
def _set_serialization_path(self, path: str, key: str) -> None:
|
768
|
+
self._serialization_path = {"path": path, "key": key}
|
769
|
+
|
770
|
+
def _clear_serialization_path(self) -> None:
|
771
|
+
self._serialization_path = None
|
772
|
+
|
773
|
+
|
774
|
+
if np:
|
775
|
+
NDArrayType.types.append(np.ndarray)
|
776
|
+
|
777
|
+
# class KeyPolicy:
|
778
|
+
# EXACT = "E" # require exact key match
|
779
|
+
# SUBSET = "S" # all known keys are optional and unknown keys are disallowed
|
780
|
+
# UNRESTRICTED = "U" # all known keys are optional and unknown keys are Unknown
|
781
|
+
|
782
|
+
|
783
|
+
class TypedDictType(Type):
|
784
|
+
"""Represents a dictionary object where each key can have a type."""
|
785
|
+
|
786
|
+
name = "typedDict"
|
787
|
+
legacy_names = ["dictionary"]
|
788
|
+
types: t.ClassVar[t.List[type]] = [dict]
|
789
|
+
|
790
|
+
def __init__(
|
791
|
+
self,
|
792
|
+
type_map: t.Optional[t.Dict[str, ConvertibleToType]] = None,
|
793
|
+
):
|
794
|
+
if type_map is None:
|
795
|
+
type_map = {}
|
796
|
+
self.params.update(
|
797
|
+
{
|
798
|
+
"type_map": {
|
799
|
+
key: TypeRegistry.type_from_dtype(type_map[key]) for key in type_map
|
800
|
+
}
|
801
|
+
}
|
802
|
+
)
|
803
|
+
|
804
|
+
@classmethod
|
805
|
+
def from_obj(cls, py_obj: t.Optional[t.Any] = None) -> "TypedDictType":
|
806
|
+
if not isinstance(py_obj, dict):
|
807
|
+
TypeError("TypedDictType.from_obj expects a dictionary")
|
808
|
+
|
809
|
+
assert isinstance(py_obj, dict) # helps mypy type checker
|
810
|
+
return cls({key: TypeRegistry.type_of(py_obj[key]) for key in py_obj})
|
811
|
+
|
812
|
+
def assign_type(self, wb_type: "Type") -> t.Union["TypedDictType", InvalidType]:
|
813
|
+
if (
|
814
|
+
isinstance(wb_type, TypedDictType)
|
815
|
+
and len(
|
816
|
+
set(wb_type.params["type_map"].keys())
|
817
|
+
- set(self.params["type_map"].keys())
|
818
|
+
)
|
819
|
+
== 0
|
820
|
+
):
|
821
|
+
type_map = {}
|
822
|
+
for key in self.params["type_map"]:
|
823
|
+
type_map[key] = self.params["type_map"][key].assign_type(
|
824
|
+
wb_type.params["type_map"].get(key, UnknownType())
|
825
|
+
)
|
826
|
+
if isinstance(type_map[key], InvalidType):
|
827
|
+
return InvalidType()
|
828
|
+
return TypedDictType(type_map)
|
829
|
+
|
830
|
+
return InvalidType()
|
831
|
+
|
832
|
+
def assign(
|
833
|
+
self, py_obj: t.Optional[t.Any] = None
|
834
|
+
) -> t.Union["TypedDictType", InvalidType]:
|
835
|
+
if (
|
836
|
+
isinstance(py_obj, dict)
|
837
|
+
and len(set(py_obj.keys()) - set(self.params["type_map"].keys())) == 0
|
838
|
+
):
|
839
|
+
type_map = {}
|
840
|
+
for key in self.params["type_map"]:
|
841
|
+
type_map[key] = self.params["type_map"][key].assign(
|
842
|
+
py_obj.get(key, None)
|
843
|
+
)
|
844
|
+
if isinstance(type_map[key], InvalidType):
|
845
|
+
return InvalidType()
|
846
|
+
return TypedDictType(type_map)
|
847
|
+
|
848
|
+
return InvalidType()
|
849
|
+
|
850
|
+
def explain(self, other: t.Any, depth=0) -> str:
|
851
|
+
exp = super().explain(other, depth)
|
852
|
+
gap = "".join(["\t"] * depth)
|
853
|
+
if isinstance(other, dict):
|
854
|
+
extra_keys = set(other.keys()) - set(self.params["type_map"].keys())
|
855
|
+
if len(extra_keys) > 0:
|
856
|
+
exp += "\n{}Found extra keys: {}".format(
|
857
|
+
gap, ",".join(list(extra_keys))
|
858
|
+
)
|
859
|
+
|
860
|
+
for key in self.params["type_map"]:
|
861
|
+
val = other.get(key, None)
|
862
|
+
if isinstance(self.params["type_map"][key].assign(val), InvalidType):
|
863
|
+
exp += "\n{}Key '{}':\n{}".format(
|
864
|
+
gap,
|
865
|
+
key,
|
866
|
+
self.params["type_map"][key].explain(val, depth=depth + 1),
|
867
|
+
)
|
868
|
+
return exp
|
869
|
+
|
870
|
+
def __repr__(self):
|
871
|
+
return "{}".format(self.params["type_map"])
|
872
|
+
|
873
|
+
|
874
|
+
# Special Types
|
875
|
+
TypeRegistry.add(InvalidType)
|
876
|
+
TypeRegistry.add(AnyType)
|
877
|
+
TypeRegistry.add(UnknownType)
|
878
|
+
|
879
|
+
# Types with default type mappings
|
880
|
+
TypeRegistry.add(NoneType)
|
881
|
+
TypeRegistry.add(StringType)
|
882
|
+
TypeRegistry.add(TimestampType)
|
883
|
+
TypeRegistry.add(NumberType)
|
884
|
+
TypeRegistry.add(BooleanType)
|
885
|
+
TypeRegistry.add(ListType)
|
886
|
+
TypeRegistry.add(TypedDictType)
|
887
|
+
|
888
|
+
# Types without default type mappings
|
889
|
+
TypeRegistry.add(UnionType)
|
890
|
+
TypeRegistry.add(PythonObjectType)
|
891
|
+
TypeRegistry.add(ConstType)
|
892
|
+
|
893
|
+
# Common Industry Types
|
894
|
+
TypeRegistry.add(NDArrayType)
|
895
|
+
|
896
|
+
__all__ = [
|
897
|
+
"TypeRegistry",
|
898
|
+
"InvalidType",
|
899
|
+
"UnknownType",
|
900
|
+
"AnyType",
|
901
|
+
"NoneType",
|
902
|
+
"StringType",
|
903
|
+
"NumberType",
|
904
|
+
"TimestampType",
|
905
|
+
"BooleanType",
|
906
|
+
"ListType",
|
907
|
+
"TypedDictType",
|
908
|
+
"UnionType",
|
909
|
+
"PythonObjectType",
|
910
|
+
"ConstType",
|
911
|
+
"OptionalType",
|
912
|
+
"Type",
|
913
|
+
"NDArrayType",
|
914
|
+
]
|